Aquesta comanda afegeix un usuari a diversos grups de cop, sense treure’l dels que ja té. És la manera habitual de donar-li accés a dispositius: en aquest cas, a dispositius extraïbles (plugdev) i als ports sèrie (dialout), per exemple per programar un Arduino o fer servir un mòdem o un adaptador USB-sèrie.
sudo usermod -aG plugdev,dialout,pip usuari1
Peça a peça
| Part | Què fa |
|---|---|
sudo | Cal ser administrador per canviar els grups d’un usuari |
usermod | Modifica un compte existent |
-a | Append: afegeix els grups als que l’usuari ja té |
-G plugdev,dialout,pip | Llista de grups secundaris, separats per comes i sense espais |
usuari1 | L’usuari que es modifica |
La -a és imprescindible
Sense -a, l’opció -G substitueix tots els grups secundaris de l’usuari per la llista que indiques. És un error clàssic i pot fer que un administrador perdi l’accés a sudo:
$ id joan
uid=1001(joan) gid=1001(joan) groups=1001(joan),27(sudo),2001(vendes)
$ sudo usermod -G dialout joan # sense -a!
$ id joan
uid=1001(joan) gid=1001(joan) groups=1001(joan),20(dialout)
Amb -aG, en canvi, s’hi afegeix i prou:
$ sudo usermod -aG dialout joan
$ id joan
uid=1001(joan) gid=1001(joan) groups=1001(joan),20(dialout),27(sudo),2001(vendes)
El grup pip no existeix
Aquest exemple ve d’una versió antiga del blog, que deia que pip era un grup per accedir als paquets de Python. No és cert: no hi ha cap grup pip estàndard a Debian, Ubuntu ni Raspberry Pi OS, i per instal·lar paquets amb pip no cal cap grup especial.
I això té conseqüències: si algun dels grups de la llista no existeix, usermod dona error i no afegeix l’usuari a cap:
$ sudo usermod -aG plugdev,dialout,pip usuari1
usermod: group 'pip' does not exist
$ id usuari1
uid=1000(usuari1) gid=1000(usuari1) groups=1000(usuari1)
La versió correcta és, doncs:
sudo usermod -aG plugdev,dialout usuari1
Grups útils per a dispositius
| Grup | Dona accés a |
|---|---|
dialout | Ports sèrie: /dev/ttyUSB*, /dev/ttyACM* (Arduino, ESP32, mòdems) |
plugdev | Alguns dispositius extraïbles i USB |
video | Càmeres i acceleració de vídeo |
audio | Dispositius de so |
lp | Impressores |
gpio, i2c, spi | Els busos del Raspberry Pi (només a Raspberry Pi OS) |
docker | El dimoni de Docker (equival a tenir accés de root: dona’l amb compte) |
Per veure quins grups té un dispositiu concret, mira’n el grup amb ls -l:
$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 Oct 3 17:40 /dev/ttyUSB0
El canvi no s’aplica a la sessió oberta
Els grups d’un procés es fixen quan inicies la sessió. Després de l’usermod, l’usuari ha de tancar la sessió i tornar a entrar (o reiniciar, si és una sessió gràfica). Mentrestant, id usuari1 ja mostrarà els grups nous, però id sense arguments, a la sessió antiga, encara no.
Si no vols sortir, pots obrir un shell amb el grup nou amb newgrp:
newgrp dialout
Alternatives
# Debian/Ubuntu: d'un grup en un
sudo adduser usuari1 dialout
# Qualsevol distribució: d'un grup en un
sudo gpasswd -a usuari1 dialout
# Treure'l d'un grup
sudo gpasswd -d usuari1 dialout
Comandes relacionades
usermod: totes les opcions.adduser:adduser usuari grupa Debian i Ubuntu.newgrp: fer servir un grup nou sense tancar la sessió.groupadd: crear un grup que no existeix.- Usuaris i grups a Linux: grup primari i grups secundaris.