X11 모든 DISPLAY의 모든 사용자에게 알림 보내기

X11 모든 DISPLAY의 모든 사용자에게 알림 보내기

중복 가능성:
실행 중인 모든 X 모니터에 알림 표시

루트로서 원격 서버에서 사용자에게 메시지 창을 표시하는 명령을 실행하려고 합니다. 문제는 su - user 없이 모든 사용자에 대해 올바른 DISPLAY 값을 얻을 수 있는 방법입니다(너무 많은 시간이 걸리기 때문). 많은 사용자를 위한 시간) ?

답변1

간단히 말해서, 원하는 것에 대한 솔루션(TM)이 없습니다.

그러나 설정을 충분히 이해하면 자신에게 적합한 솔루션을 개발할 수 있습니다. 한 번 같은 문제가 발생했습니다.

이것이 어려운 이유는 Xserver가 사용자와 전혀 연결되어 있지 않기 때문입니다. 선택한 데스크탑 환경에 로그인하고 터미널을 열고 를 입력하여 주요 Linux 배포판에서 이를 확인할 수 있습니다 ps faux. 여기에는 (적어도) 두 개의 하위 프로세스, 즉 xserver와 사용자 세션에 속한 모든 프로세스의 상위 프로세스가 있는 디스플레이 관리자가 표시됩니다. xserver는 루트로 시작되고아니요귀하의 세션이 속한 사용자로서.

특정 xserver를 사용자 이름과 일치시키기 위해 내가 하는 일은 과반수 투표를 하는 것입니다. 각 사용자 프로세스를 살펴보고 어떤 xserver에 연결되어 있는지 확인합니다. 이 지식을 바탕으로 특정 xserver에 연결된 사용자당 프로세스 수를 알려주는 목록을 만들었습니다. 테이블의 예는 다음과 같습니다.

      |xserver :1| xserver :2 | xserver :3 | xserver :4
-------------------------------------------------------------
alice |    17    |      0     |      0     |       0
bob   |     0    |      0     |     14     |       0
eve   |     0    |     34     |      1     |       0
foo   |     1    |      1     |      1     |       8

이 테이블을 사용하여 간단한 다수결 투표를 수행하여 매핑을 생성합니다.

  • 사용자 alice는 xserver:1을 사용 중입니다(즉, 앞에 앉아 있음).
  • 사용자 bob은 xserver:3을 사용하고 있습니다.
  • 사용자 eve는 xserver:2를 사용하고 있습니다.
  • 사용자 foo는 xserver:4를 사용하고 있습니다.

이 다수 투표가 반드시 올바른 매핑을 생성하는 것은 아니지만 모든 의도와 목적을 위해 나에게는 충분합니다.

그게 당신이 필요한 전부입니다. 이제 할 수 있다

DISPLAY=<ip.to.xserver>:1 xmessage -buttons yes,no,maybe -nearmouse "Do you want to go on a date with me?"

앨리스에게 데이트 신청을 해보세요.

마술은 xapplications가 어떤 xserver에 연결해야 하는지 알아내기 위해 사용하는 DISPLAY 환경 변수입니다. 대부분의 xapplications도 이 옵션을 허용합니다 -display. xmessage및 에 대한 매뉴얼 페이지를 참조하십시오 X.

물론 내 다수표를 대체할 수 있는 다른 방법도 많이 있습니다. 어느 것이 당신에게 가장 좋은지 스스로 발견해야 합니다...

관련 정보