방송 메시지의 동작이 궁금합니다
$ sudo wall myfile
의 메시지는 myfile
모든 장치( /dev/ttyN
+ +를 눌러 전환할 수 있는 장치)에 표시되고, 열려 있는 창에도 표시되지만 표시되지 않습니다(실제로 저는 Linux Mint와 MATE를 사용하므로, 그러나 그것은 )의 포크입니다.CtrlAltfNxterm
gnome-terminal
mate-terminal
gnome-terminal
tmux
실행하면 한 가지 더 흥미로운 참고 사항이 있습니다 . 실행 중인 모든 터미널 세션 (모든 창 및 모든 창의 모든 창) xterm
에 메시지가 나타날 것으로 예상했지만 실제로는 메시지가 현재 커서 위치의 창에만 나타납니다 .tmux
xterm
tmux를 호출하여 현재 제어 중인 터미널을 확인하면 tty
tmux의 여러 창에 대해 서로 다른 터미널이 보고됩니다. 예를 들어 /dev/pts/11
하나의 tmux 창이 있고 /dev/pts/12
다른 창이 있습니다. 그러나 브로드캐스트 메시지는 xterm
창당 한 번만 표시되며 에서 열린 터미널 세션당 한 번은 표시되지 않습니다 tmux
.
제가 보기에는 터미널 에뮬레이터가 의사 터미널을 할당할 때 브로드캐스트 메시지를 수신할 수 있도록 어딘가에 "등록"해야 하는 것 같습니다. 그래서 xterm
그렇게 하지만 mate-terminal
그렇지 tmux
않습니다. 그러나 이것은 이상하게 들립니다. 왜냐하면 의사 터미널은 커널에 의해 할당되고 따라서 필요할 때마다 자동으로 "등록"되어야 하기 때문입니다.
누군가 이것이 어떻게 작동하는지 그리고 왜 이 동작이 이런 것인지(이상해 보이는지) 설명할 수 있다면 기쁠 것입니다.
답변1
나열된 터미널은 Linux에서 이 동작이 발생함을 나타냅니다. 단서는 매뉴얼 페이지에 있습니다.wall
(솔라리스예를 들어 다름):
wall
현재 모든 터미널의 터미널에 메시지, 파일 내용 또는 기타 표준 입력을 표시합니다.로그인 사용자.예를 들어 일부 세션은
wdm
다음으로 시작됩니다.펌프(5)ut_type
데이터의 ':' 문자를 사용하면 해당 데이터에서 메시지를 얻을 수 없습니다wall
. 이는 쓰기 오류를 방지하기 위해 수행됩니다.
즉, wall
utmp 데이터를 사용하여 사용 중인 터미널(예: 로그인한 사용자)을 찾고 관련 내용을 작성합니다.장비. 출력의 각 줄에는 w
utmp 파일의 터미널에 의해 기록된 (가능한) 터미널이 표시됩니다. 예를 들어 SSH를 통해 서버에 연결하고 콘솔에 로그인한 상태에서 화면을 실행합니다. 완전성을 위해 -ls
(login-shell) 옵션을 사용하여 xterm을 실행하고 있습니다. 출력은 다음과 같습니다 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 -c w
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
wall
각 장치 TTY
에 씁니다 .
그러나 터미널의 경우아니요utmp 파일에 쓰면 나열되지 않으며 wall
무시됩니다.
이제 일부 프로그램은 이 기능을 컴파일했지만 이를 변경할 수 있는 권한이 부족할 수 있습니다. 이것이 일부 프로그램이 setgid
"utmp" 그룹에서 실행되는 이유입니다. 다른 프로그램(예: xterm 또는 gnome-terminal)은 자신을 대신하여 utmp를 업데이트하는 외부 프로그램을 사용할 수 있습니다.
gnome-terminal의 경우 이 기능은 더 이상 사용되지 않습니다. 왜냐하면 gnome 개발자의 사고방식은 (a) 사용자가 로컬 시스템에서 실행된다는 것입니다.gdm
로그인을 처리하므로 (b) 로그인 쉘과 비로그인 쉘 사이에 걱정할 만한 차이가 없습니다. 이로 인해 몇 가지 흥미로운 오류 보고서가 생성되었습니다.
답변2
에 urxvt
발행해야 합니다.
chown root.utmp /usr/bin/urxvt
chmod g+s /usr/bin/urxvt
그런 다음 작동하기 시작했습니다.
이유를 모르겠습니다. 이후 복사(및 테스트)했습니다.http://permalink.gmane.org/gmane.comp.terminal-emulators.rxvt-unicode.general/1484.