Je suis curieux au sujet du comportement des messages diffusés par
$ sudo wall myfile
le message de myfile
apparaît sur tous les périphériques /dev/ttyN
(ceux que je peux changer en appuyant sur Ctrl + Alt + fN ), il apparaît également sur les windows xterm
j'ai ouvertes mais n'apparaît pas sur le gnome-terminal
(en fait j'utilise Linux Mint avec MATE, donc c'est mate-terminal
, mais c'est fourchette de gnome-terminal
).
Il y a aussi une note intéressante si tmux
dans le xterm
: je m'attendais à ce que le message apparaisse sur toutes les sessions du terminal qui s'exécutent dans tmux
(sur toutes les windows et dans chaque volet de chaque window) position du slider dans la window xterm
.
Si je vérifie le terminal de contrôle actuel en appelant tty
, il signale différents terminaux pour différentes windows dans tmux: disons que j'ai /dev/pts/11
dans une window tmux et /dev/pts/12
dans un autre. Mais, le message de diffusion apparaît une seule fois pour chaque window xterm
, pas pour chaque session de terminal ouverte dans tmux
.
Il me semble que l'émulateur de terminal, lorsqu'il alloue un pseudo-terminal, a besoin de "l'save" quelque part pour le rendre capable de recevoir des messages diffusés, et donc, xterm
fait, mais mate-terminal
et tmux
ne le font pas. Mais cela semble bizarre puisque le pseudo-terminal est alloué par le kernel, alors il devrait être "enregistré" automatiquement partout où il doit être.
Je serais heureux si quelqu'un explique comment cela fonctionne et pourquoi le comportement est-ce (apparemment bizarre).
Les terminaux listés indiquent que le comportement est vu avec Linux: Les indices sont dans la page de manuel pour le wall
( Solaris par exemple est différent):
wall
affiche un message, ou le contenu d'un file, ou autrement son input standard, sur les terminaux de tous les users actuellement connectés .Certaines sessions, comme
wdm
, qui ont au début de utmp (5)ut_type
data un caractère ':' ne recevront pas le message duwall
. Ceci est fait pour éviter les erreurs d'écriture.
Autrement dit, wall
utilise datatables utmp, search les terminaux utilisés (c'est-à-dire les users connectés) et écrit sur le périphérique associé. Chaque ligne de la sortie de w
montre un terminal (possible), enregistré par le terminal dans le file utmp. Par exemple, je suis ssh'd dans un server et l'écran en cours d'exécution alors que dans le même time, je me suis connecté à une console. Pour être complet, j'ai lancé xterm en utilisant l' -ls
(login-shell). Voici la sortie de w
:
$ w 19:53:15 up 4:08, 5 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT tom tty2 19:48 5:11 0.04s 0.02s -tcsh tom pts/0 michener:S.0 15:51 13:18 0.35s 0.24s ssh -X thomas@b tom pts/2 michener:S.1 16:34 2.00s 0.14s 0.00s sh -cw tom pts/4 michener:S.3 15:52 3:59m 0.12s 0.00s /bin/sh /users/ tom pts/3 localhost:10.0 19:53 7.00s 0.03s 0.03s -tcsh
et l'exécution wall
écritures wall
sur chacun de ces appareils TTY
.
Cependant, si le terminal n'écrit pas dans le file utmp, il ne sera pas listé – et le wall
l'ignorera.
Maintenant, certains programmes peuvent avoir la fonctionnalité compilée, mais n'ont pas les privilèges nécessaires pour la modifier. C'est pourquoi certains programmes sont exécutés avec setgid
pour le groupe "utmp". D'autres programmes (tels que xterm – ou gnome-terminal) peuvent utiliser un programme externe qui met à jour utmp en leur nom.
Avec gnome-terminal, la fonctionnalité a été déconseillée en raison de l'état d'esprit des développeurs gnome (a) que les users s'exécutent sur une machine locale, où gdm
gère la connection, et (b) par conséquent il n'y a pas de distinction -login coquilles. Cela rend certains rapports de bugs intéressants:
Sur urxvt
, vous devez émettre
chown root.utmp /usr/bin/urxvt chmod g+s /usr/bin/urxvt
Ensuite, ça commence à fonctionner.
Je ne comprends pas pourquoi, juste copié (et testé) de http://permalink.gmane.org/gmane.comp.terminal-emulators.rxvt-unicode.general/1484 .