16.04에서 wall이 GUI 터미널로 브로드 캐스트되지 않습니다


11

제목이 요약됩니다. Running wall <<< "TEST"은 메시지를 TTY에는 표시하지만 GUI 터미널에는 표시되지 않습니다 ( gnome-terminal및로 테스트 sakura).

wall메시지 에 의존하는 배터리 및 온도 모니터링 스크립트가 여러 개 있으며 최근 16.04로 업그레이드 한 후 GUI에서 작동이 중지 된 것으로 나타났습니다.

이것이 버그인지 아니면 GUI에 메시지가 표시되지 않는지 확인할 수 없습니다.

어떻게 진행해야합니까?

추가 정보:

byobuGUI 터미널에서 실행 하면 벽 메시지가 표시됩니다.


2
아마도 관련 askubuntu.com/questions/12654/... (조사 xmessage, gxmessage또는 notify-send)
닉 와인버그

6
나는 오늘 일찍 그것을 읽었습니다. 예, 다소 관련이 있지만 큰 반대 의견은 1) 10.10에서 질문이 왔으며 14.04에서이 작동하고 있다는 것입니다. 2) 나에게 만족스럽지 않은 해결책이 있습니다. notify-send 짧은 메시지와 GUI에서만 작동합니다. wall모든 터미널에 대해 하나 개의 명령을 사용하는 대신 청각과 GUI 및 기타에있을 수있는 다른 모든 세션에 대해 뭔가 쓰기의 좋은 편리함이 DISPLAY이 적어도 이럴에서 아주 좋은 대안이되지 않도록,들
세르지 Kolodyazhnyy

최근 15.010에서 동일한 문제가 발생했습니다. 16.04 Ubuntu Mate의 Im이며 여기에서 작동하는 것으로 보입니다. 기본 라이브러리에 문제가있을 수 있습니다. 아마도 mesg 명령이 무엇을하는지보세요? shutdown -k 5가 모든 가상 터미널에서 작동합니까? 쓰기 기능이 제대로 작동합니까? 작동하지 않는 다른 컴퓨터를 찾으면 소스 코드를 살펴 보겠습니다. 사용자 공간 라이브러리 문제를 추측합니다.
j0h

1
@ j0h 실제로 문제는 그놈 터미널 때문입니다. 로그인 레코드를 업데이트하는 데 사용되었으므로 예를 들어 who이전에 gnome 터미널에서 실행 한 경우 열려있는 모든 탭을 표시하지만 더 이상 표시하지 않습니다. Wall은 로그인 레코드를 업데이트하는 터미널 세션에만 메시지를 보냅니다. Mate는 기본적으로 다른 터미널을 사용합니다. 나는 이것을 오래 전에 알아 냈지만 실제로 답변을 게시하지는 않았습니다. 이번 주 어느 시점에서 그렇게 할 것입니다.
Sergiy Kolodyazhnyy

나는 당신이 이것을 해킹 할 수있는 방법을 알고있다 : <br>
Stancu Mihai

답변:


5

그놈 터미널의 작동 방식으로 인해 터미널 wall로 등록하지 마십시오. 보다 자세한 설명은 여기를 참조하십시오 . 사쿠라도 마찬가지입니다.

Stancu Mihai의 답변을 기반으로 사용자 이름과 타임 스탬프가있는 배너를 포함하여 일반적으로 작동 하는 방식을 모방 한 스크립트 를 만들었습니다 wall(배너를 제거하려면 -n 또는 --nobanner 사용). 스크립트는 현재 파일에서 메시지 읽기를 지원하지 않습니다.

wall에 별명을 추가 하여 일반 명령을이 명령으로 바꿀 수 있습니다 ~/.bashrc.

echo 'alias wall="~/your/path/to/wall.sh"' >> ~/.bashrc

사용법 예 :

$ wall "some message"

Broadcast message from username@hostname (pts/19) (Wed Mar 29 11:07:35 2017):

some message

$ wall -h

Usage:
 wall [options] [message]

Write a message to all users.

Options:
 -n, --nobanner          do not print banner
 -h, --help              display this help and exit

대단한 @danmou!
Stancu Mihai

1

예, gnome-terminal은 로그인 레코드를 업데이트하지 않는다는 것이 사실입니다.

  1. 모든 활성 의사 터미널을 찾아 봅시다
ps -ef | grep " pts/" | awk '{print $6}' | sort -u | tee terminals4message.txt

이를 통해 모든 데스크탑 터미널 세션을 나열 할 수 있습니다.

활성 데스크탑 터미널 세션에 메시지를 보내는 다른 방법

echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number
  1. tty sesions를 잊지 마세요
ps -ef | grep " tty" | awk '{print $6}' | sort -u | grep -v "pts" | tee terminals4message.txt

이것은 모든 pty 세션을 나열하는 데 도움이됩니다.

  1. 모든 사람에게 메시지 보내기
cat terminals4message.txt | while read TTY_TO; do echo -e "SYSTEM MESAGE: $(date) - \n MESAJ" | sudo tee /dev/$TTY_TO 1>/dev/null
  1. 이제 모두 함께합시다. 현재 월 앱을 대체하고 위의 모든 것을 통합하는 멋진 스크립트를 만들 수 있습니다.
    그런 다음 ~ / .bashrc에 추가 할 수 있습니다 alias wall="your_wall_replacement.sh" .이 방법으로 현재 벽을 삭제할 필요가 없습니다.

누군가 내가이 주제에 집중하지 못하게해서 뭔가 옳지 않다면 미안합니다 ... 이상한 것을 발견하면 의견을 남겨주세요.

10 배


여기에 하나의 라이너가 있습니다. awk를 cut으로 바 꾸었으므로 한 가지 유형의 견적 만 있습니다. ps -ef | grep -e " tty" -e " pts/" | tr -s " " | cut -d " " -f 6 | sort -u | while read TTY; do echo "MESSAGE" | tee /dev/$TTY 1>/dev/null; done
CJxD

0

다른 사람들이 많은 방법이 있다고 제안하면서, 내가 찾은보다 직접적인 (쉬운) 방법을 여기에 넣었습니다 (여기에 echo "$MESSAGE_to_send" | sudo tee /dev/pts/$terminal_number: 논의 됨).

echo "Your message" > /dev/pts/$terminal-no

여기서는 terminal-no"tty"명령을 통해 다른 터미널에서 얻을 수 있습니다.

tty

/dev/pts/12

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.