브로드캐스트 메시지는 gnome 터미널에는 나타나지 않지만 xterm에는 나타납니다.

브로드캐스트 메시지는 gnome 터미널에는 나타나지 않지만 xterm에는 나타납니다.

방송 메시지의 동작이 궁금합니다

$ sudo wall myfile

의 메시지는 myfile모든 장치( /dev/ttyN+ +를 눌러 전환할 수 있는 장치)에 표시되고, 열려 있는 창에도 표시되지만 표시되지 않습니다(실제로 저는 Linux Mint와 MATE를 사용하므로, 그러나 그것은 )의 포크입니다.CtrlAltfNxtermgnome-terminalmate-terminalgnome-terminal

tmux실행하면 한 가지 더 흥미로운 참고 사항이 있습니다 . 실행 중인 모든 터미널 세션 (모든 창 및 모든 창의 모든 창) xterm에 메시지가 나타날 것으로 예상했지만 실제로는 메시지가 현재 커서 위치의 창에만 나타납니다 .tmuxxterm

tmux를 호출하여 현재 제어 중인 터미널을 확인하면 ttytmux의 여러 창에 대해 서로 다른 터미널이 보고됩니다. 예를 들어 /dev/pts/11하나의 tmux 창이 있고 /dev/pts/12다른 창이 있습니다. 그러나 브로드캐스트 메시지는 xterm창당 한 번만 표시되며 에서 열린 터미널 세션당 한 번은 표시되지 않습니다 tmux.

제가 보기에는 터미널 에뮬레이터가 의사 터미널을 할당할 때 브로드캐스트 메시지를 수신할 수 있도록 어딘가에 "등록"해야 하는 것 같습니다. 그래서 xterm그렇게 하지만 mate-terminal그렇지 tmux않습니다. 그러나 이것은 이상하게 들립니다. 왜냐하면 의사 터미널은 커널에 의해 할당되고 따라서 필요할 때마다 자동으로 "등록"되어야 하기 때문입니다.

누군가 이것이 어떻게 작동하는지 그리고 왜 이 동작이 이런 것인지(이상해 보이는지) 설명할 수 있다면 기쁠 것입니다.

답변1

나열된 터미널은 Linux에서 이 동작이 발생함을 나타냅니다. 단서는 매뉴얼 페이지에 있습니다.wall(솔라리스예를 들어 다름):

wall현재 모든 터미널의 터미널에 메시지, 파일 내용 또는 기타 표준 입력을 표시합니다.로그인 사용자.

예를 들어 일부 세션은 wdm다음으로 시작됩니다.펌프(5) ut_type데이터의 ':' 문자를 사용하면 해당 데이터에서 메시지를 얻을 수 없습니다 wall. 이는 쓰기 오류를 방지하기 위해 수행됩니다.

즉, wallutmp 데이터를 사용하여 사용 중인 터미널(예: 로그인한 사용자)을 찾고 관련 내용을 작성합니다.장비. 출력의 각 줄에는 wutmp 파일의 터미널에 의해 기록된 (가능한) 터미널이 표시됩니다. 예를 들어 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.

관련 정보