1. Obtenir un Shell avec le nouveau groupe sans se déconnecter et se reconnecter à nouveau.
Si vous n'ajoutez qu'un seul groupe, j'ai utilisé ce qui suit :
exec sg <new group name> newgrp `id -gn`
Il s'agit d'une variante de l'astuce newgrp à deux niveaux de Legooolas, mais elle se fait en une seule ligne et ne nécessite pas d'entrer manuellement votre groupe primaire.
sg
est newgrp mais accepte une commande à exécuter avec le nouvel ID de groupe. Le site exec
signifie que le nouveau Shell remplace le Shell existant, de sorte que vous n'avez pas besoin de vous "déconnecter" deux fois.
Contrairement à l'utilisation de su, vous n'avez pas besoin de taper votre mot de passe. Il ne rafraîchit pas non plus votre environnement (autre que l'ajout du groupe), vous conservez donc votre répertoire de travail actuel, etc.
2. Exécution de la commande dans toutes les fenêtres d'écran d'une session
El at
dans Screen exécute une commande dans le Windows que vous spécifiez (notez qu'il s'agit d'une commande Screen, pas d'une commande Shell).
Vous pouvez utiliser la commande suivante pour envoyer la commande à toutes les sessions Screen existantes :
screen -S <session_name> -X at \# stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"
Notez la nécessité d'échapper les backticks pour obtenir id
pour l'exécuter dans la session Screen, et ^M pour que Screen appuie sur 'enter' à la fin de votre commande.
Notez également que l'écran stuff
tape simplement le texte de la commande à votre place. Par conséquent, quelque chose d'étrange peut se produire si l'un des Windows de l'écran a une commande à moitié écrite à une invite de commande ou exécute une application autre qu'un Shell (par exemple emacs, top). Si c'est un problème, j'ai quelques idées :
- Pour se débarrasser d'une commande à moitié écrite, vous pouvez ajouter "^C" au début de la commande.
- Pour éviter de lancer la commande dans une fenêtre emacs, etc, vous pouvez demander à `at' de filtrer sur le titre de la fenêtre etc (dans l'exemple ci-dessus, j'utilise "#", qui correspond à toutes les fenêtres, mais vous pouvez filtrer par titre de fenêtre, utilisateur, etc).
Pour exécuter la commande dans une fenêtre spécifique (identifiée par le numéro de la fenêtre), utilisez ce qui suit :
screen -S <session_name> -p 0 -X stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"
0 votes
Je sais qu'au moins pour certains gestionnaires de fenêtres/sessions, il est possible de le faire de telle sorte que la session récupère le nouveau groupe et qu'il soit disponible pour tout nouveau processus lancé à partir des menus, des boutons du panneau ou autre. Je viens juste de venir ici pour retrouver cette information, donc je ne peux pas dire maintenant comment faire, et c'est probablement spécifique au gestionnaire de fenêtres.