Detect new group and update environment during live session.
Detect a new group.
$ diff -q <(id --groups --name | tr ' ' '\n'|sort) <(id --groups --name $USER | tr ' ' '\n'|sort)
Files /dev/fd/63 and /dev/fd/62 differ
$ echo $?
1
Display added or removed groups using diff utility.
$ diff -y <(id --groups --name | tr ' ' '\n'|sort) <(id --groups --name $USER | tr ' ' '\n'|sort)
adm adm cdrom cdrom dip dip > docker lpadmin lpadmin lxd lxd milosz milosz plugdev plugdev sambashare sambashare sudo sudo
$ diff <(id --groups --name | tr ' ' '\n'|sort) <(id --groups --name $USER | tr ' ' '\n'|sort)
3a4 > docker
$ diff -u99 <(id --groups --name | tr ' ' '\n'|sort) <(id --groups --name $USER | tr ' ' '\n'|sort)
--- /dev/fd/63 2022-06-07 01:34:07.925535876 +0200 +++ /dev/fd/62 2022-06-07 01:34:07.925535876 +0200 @@ -1,9 +1,10 @@ adm cdrom dip +docker lpadmin lxd milosz plugdev sambashare sudo
Display new groups using comm
utility.
$ comm -13 <(id --groups --name | tr ' ' '\n' | sort) <(id --groups --name $USER | tr ' ' '\n' | sort)
docker
Inspect groups in current environment.
$ id --groups --name
milosz adm cdrom sudo dip plugdev lpadmin lxd sambashare
Inspect desired groups.
$ id --groups --name $USER
milosz adm cdrom sudo dip plugdev lpadmin lxd sambashare docker
Detect new groups and add these to current environment automatically.
➜ eval $(comm -13 <(id --groups --name | tr ' ' '\n' | sort) <(id --groups --name $USER | tr ' ' '\n' | sort) | xargs -I{} echo newgrp {}); newgrp -
Inspect groups in current environment.
$ id
uid=1000(milosz) gid=1000(milosz) groups=1000(milosz),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),122(lpadmin),133(lxd),134(sambashare),140(docker)
Now everything will work as expected.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e6caef079f86 louislam/uptime-kuma:1 "/usr/bin/dumb-init …" 4 weeks ago Up 6 days (healthy) 0.0.0.0:3001->3001/tcp, :::3001->3001/tcp uptime-kuma cc9f2a1492e9 lissy93/dashy:2.0.7 "/sbin/tini -- yarn …" 4 weeks ago Up 6 days (healthy) 0.0.0.0:8080->80/tcp, :::8080->80/tcp my-dashboard