Linux : X11에 로그인 한 로컬 사용자에게 메시지를 보내는 방법은 무엇입니까?


10

콘솔에서 X (xdm, fluxbox)에 로그인 한 로컬 사용자에게 메시지 (팝업 창 또는 기타)를 보낼 수 있습니까? 예를 들면 다음 user1과 같습니다. X / fluxbox를 사용 user2하여 콘솔에 ssh를 사용하여 동일한 상자에 로그인합니다. 이제- user2메시지를 보내려면 user1어떻게 해야 합니까?

답변:


15

xmessage도구를 사용하면 정확히 그렇게 할 수 있습니다. 내부에 문자 메시지가있는 사용자에게 팝업 창을 표시합니다.

예 : user2가 상자에서 BASH 세션에 로그인하여 다음을 실행합니다.

export DISPLAY=':0.0'
xmessage "some message here"

TSCH 세션에 로그인하면 다음과 같습니다.

setenv DISPLAY ':0.0'
xmessage "some message here'

또는 다음 두 가지 방법 중 하나로 터미널 세션에 메시지를 보낼 수 있습니다.

사용 wall(= 모든 [사용자] 경고)

맨 페이지에서 :
Wall은 파일의 내용 또는 기본적으로 표준 입력을 현재 로그인 한 모든 사용자의 터미널에 표시합니다.

특정 사용자를 타겟팅하려면을 사용하십시오 write. 다시, 사람은 우리에게 말합니다 :

쓰기 유틸리티를 사용하면 터미널에서 행으로 행을 복사하여 다른 사용자와 통신 할 수 있습니다.


수신자 ( user1내 예에서)가 X11에 로그인했는데 열리지 않았 xterm거나 다른 터미널 이 없으면 wall작동합니까? 나는 그것이 user1메시지를 보지 못할 것이라고 생각 합니다.
marioosh

'xmessage'솔루션을 포함하도록 답변을 업데이트했습니다. 터미널이 열려 있는지 여부에 관계없이 사용자에게 작은 창이 표시됩니다.
mjk

1
또한 '아 프로포즈'는 알고있는 유용한 유틸리티입니다. 전달한 텍스트를 수동 페이지에서 검색합니다. 'apropos message'를 실행하고 무엇이 반환되는지 확인하십시오.
mjk

나는 그것을 xmessage어떻게 실행 user1하고이 작은 창을 화면에 열리게 user2합니까? 가능합니까?
marioosh

@marioosh 나는 그것을하는 방법을 알고 싶습니다. 알아 낸 적이 있습니까?

2

일반적으로 X11 세션은 일반적으로 "비공개"모드에서 시작되므로 두 가지 중 하나가 필요합니다. user2화면에 액세스 할 수있는 협력 또는 화면에 "침입"하는 수퍼 유저 권한 중 하나입니다 .

위험 : 일단 화면에 액세스 한 후에는 키 입력 (암호 포함) 캡처 및 스크린 샷 캡처와 같은 작업을 수행 할 수 있으므로 보안 상 큰 위험이 따릅니다.

에서는 대부분의 경우 대신 이러한 것들에 대한 메시징 도구 또는 채팅 프로그램을 사용하는 것이 바람직합니다.

주의 사항 :

협력

경우 user2욕구가 수 있도록 user1자신의 화면에 액세스하려면 먼저 user2같은 명령을 실행해야합니다 :

 xhost +si:localuser:user1

이것은 일종의 시작 스크립트에 추가 될 수 있습니다. Fluxbox는 모르지만 rc세션 시작 후크 가 있다고 가정합니다 .

이것은 issed되면, user1다음에 쓸 수 user2그들은 그것을 찾을 수 있다면,의 표시.

user2이를 알고 있으면 언제든지 user1다른 방법으로 보낼 수 있습니다 .

다른 사용자의 디스플레이 찾기

일반적인 워크 스테이션에서는 한두 명 이상의 사용자가 로그인하는 것이 일반적이지 않습니다. 이 경우, 원하는 디스플레이가 0, 1 또는 2 일 수 있다는 "추측"은 실행 가능한 솔루션 일 수 있습니다.

그러나보다 완벽한 솔루션을 위해 많은 사용자가 로그인 할 수있는 컴퓨터가 있다고 가정하고 원하는 것을 찾으십시오.

for proc in /proc/[0-9]*/
do
     if [ Xorg = $(< $proc/comm ) ] 2>/dev/null && \
        [ $(id -u user2) -eq $(< $proc/loginuid) ] 2>/dev/null
     then
        for subproc in $(
        do
            echo "user2 display=" $(perl -ne 'if (m,DISPLAY=(.*)\0,) { print $1 }' < $subproc/environ)
        done
     fi
done

그런 다음 user1마침내 (위에서 얻은 DISPLAY 값을 사용하여 방금 작성 :14.0했습니다 ...)

DISPLAY=:14.0 xmessage "Hello, user2"

대신 알림 보내기

완벽을 기하기 위해 다음은 Gnome 데스크탑에서 작동합니다. Fluxbox에 알림 위젯이 있는지 모르겠습니다.

 DISPLAY=:14.0 notify-send "Hello, user2"

여기에는 훨씬 더 사용자에게 친숙한 표시 옵션이 있으며 아마도 사용자 화면에 더 친숙한 방식으로 나타납니다.


for subproc in뭐? 귀하의 스크립트가 여기에 손상되었다고 생각합니다.
Stéphane
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.