다른 사용자의 모니터에서 X 프로그램 실행

다른 사용자의 모니터에서 X 프로그램 실행

Ubuntu 16.04를 실행하면 host다음과 같이 설정됩니다.

  • a user1에서 GUI 로그인을 수행한 사람 host;
  • a user2, 그는 a sudoer이고 로그인되어 있습니다오직문자( )로 ssh연결하세요 ssh user2@host.

user2예를 들어 , 모니터에서 X 응용 프로그램을 실행하고 xclock싶습니다 . user1관점에서 볼 때 이는 user1자체적으로 실행될 때와 동일해야 합니다.user1xclock

프로세스의 소유자 는 프로세스를 시작한 사용자이기 때문입니다 xclock.user2중요하지 않은.

편집하다: 사용할 수 sudo있는데 비밀번호를 사용할 수 없습니다 user1. 비밀번호를 모릅니다.

어떻게 해야 하나요?


나는 읽었다이 답변그리고이 답변, 그러나 이에 대한 직접적인 예는 포함되어 있지 않습니다. 또한 쿠키 목록을 읽고 받았지만 ~/.Xautority사용할 수 없습니다.MIT-MAGIC-COOKIE-1xauth list

연결 프롬프트에서 ssh다음과 같이 시도했습니다 user2.

$ env DISPLAY=:0 XAUTHORITY=/home/user1/.Xauthority xclock

그러나 이로 인해 프롬프트가 반환되지 않습니다. 와 같이 될 수도 있으니 주의하세요 sudoer.user2유능한.Xauthority홈 디렉터리의 파일 읽기/복사/쓰기 . 그러나 및 가 동일하더라도 user1위 명령은 작동하지 않습니다.user2user1

답변1

나는 그것을 사용한 적이 없지만 sudo모니터에 다른 사용자를 두는 표준 절차는 인증 정보를 xauth(1)수동으로 사용하는 대신 내보내기를 사용하는 것입니다 ~/.Xauthority.

따라서 user1모니터에 로그인한 경우 guest( user2)는 다음 명령을 실행해야 합니다.

user2$ export DISPLAY=:0
user2$ ssh user1@localhost "xauth extract - $DISPLAY" | xauth merge -
user2$ xclock

su다음 대신 사용할 수 있습니다 ssh.

user2$ su - user1 -c "xauth extract - $DISPLAY" | xauth merge -

답변2

다른 사람의 X11 세션에 연결하려면 올바른 DISPLAY환경 변수 값과 다른 사용자의 파일 내용이 필요합니다 ~/.Xauthority.

user1로컬로 로그온한 경우 :0.0이것이 첫 번째 로컬 X11 디스플레이이기 때문에 DISPLAY 변수가 거의 항상 설정됩니다.

이후 user2다음과 같이 할 수 있습니다.

export DISPLAY=':0.0'
sudo cp ~user1/.Xauthority $TMP/user1_Xauthority
sudo chown user2 $TMP/user1_Xauthority
export XAUTHORITY=$TMP/user1_Xauthority
xclock &

왜냐하면 DISPLAY=':0.0'X11 애플리케이션에 연결하라고 지시하기 때문입니다.현지의UNIX 소켓을 통해 표시하려면 /tmp/.X11-unix/X0이러한 명령을 실제 디스플레이와 동일한 호스트에서 실행해야 합니다.

역사적으로 X11 프로토콜은 원래 TCP 포트(6000 + 모니터 번호)를 사용하여 네트워크를 통해 모니터에 연결할 수 있도록 설계되었지만 이는 안전하지 않은 것으로 입증되었으며 최신 Linux/Unix 시스템에서는 기본적으로 비활성화되는 경우가 많습니다 export DISPLAY=remotehost:0.0. 예를 들어 X11 응용 프로그램의 출력을 연결된 모니터로 푸시하는 것은 특별히 활성화하지 않는 한 작동하지 않습니다(이를 활성화하는 것은 일반적으로 나쁜 생각입니다) .remotehost

답변3

모두모든 답변의 메모는 유용하지만 제안된 명령 중 어느 것도 요청되는 솔루션이 아닙니다. 명확성을 위해 여기에 제공하려고 합니다.

가장 좋은 방법은 mosvy 방법인 것 같습니다. 또한 파일 권한이 매우 엄격하기 때문입니다 ~user1/.Xauthority.

DISPLAY사용된 활동의 수를 먼저 얻어야 합니다 . user1예를 들어, 의 출력에서 ​​얻을 수 who있으며 일반적으로 입니다 :0.

이면 비밀번호 user2sudoer아닌 비밀번호만 필요합니다 user1. user2프롬프트 에 따르면 :

user2$ export DISPLAY=:0
user2$ sudo -u user1 -i xauth extract - $DISPLAY | xauth merge -
user2$ xclock

또는 (으로 행동 user1):

user2$ sudo -u user1 DISPLAY=:0 xclock &

답변4

sudo를 전혀 사용하지 않기 때문에 완전한 솔루션을 제공할 수 없습니다. user1로 xclock을 실행하기 전에 DISPLAY 및 XAUTHORITY를 내보내야 합니다.

su -l user1 -c 'export DISPLAY=:0.0;XAUTHORITY=/home/user1/XAUTHORITY;xclock&'

DISPLAY와 XAUTHORITY가 항상 동일하지는 않기 때문에 이는 지속 가능한 솔루션이 아닙니다.

관련 정보