Windows 컴퓨터에서 한 컴퓨터 A가 원격 데스크톱 서비스를 실행하고 다른 컴퓨터 B(실제로 Windows일 필요는 없음)가 원격 데스크톱 클라이언트를 실행하는 경우 B의 사용자는 A에 대한 액세스 권한을 "도용"하여 다음을 볼 수 있습니다. 거기에 열려 있는 응용 프로그램 창은 무엇이며 상호 작용할 수 있습니다. RDP를 사용하면 기존 세션이 없는 경우 새 세션을 열 수도 있지만 이는 문제가 되지 않습니다.
내 질문: A가 X 서버를 실행하고 X 세션이 진행 중인 Linux 시스템인 경우 어떻게 동일한 효과를 얻을 수 있습니까?
노트:
- 솔루션은 MSRDP 자체를 기반으로 할 필요는 없으며 NX, VNC 또는 원하는 다른 솔루션일 수 있습니다.
- 루트를 포함하여 A와 B에 소프트웨어를 설치하려고 합니다.
- 상업적인 솔루션도 관련이 있지만 저는 그런 솔루션에 의존하고 싶지 않습니다.
- 해결 방법에는 A에서 다른 포트(예: SSH용 포트 22 외에)를 여는 것이 포함될 수 있습니다.
- 배포판이 데비안 기반이고 상당히 새로운 배포판이라고 가정합니다.
- 이 질문은 다음과 유사합니다.이것, 그러나 다음과 같은 이유로 동일하지 않습니다. 1. X와 2 이외의 서비스를 실행할 의향이 있습니다. 이 질문에서 OP는 특정 창을 얻는 데 더 관심이 있는 것 같지만 나에게는 전체를 보는 것이 중요합니다.
- A와 B의 사용자가 모두 동일한 세션과 상호 작용할 수 있는 솔루션도 적합합니다.
답변1
실행 중인 X 세션을 제어하려면 X와 동일한 모니터에 연결하도록 VNC 서버를 구성해야 합니다. 일반적으로 X는 첫 번째 모니터에 연결됩니다 :0
.
X 세션에 대한 X 권한도 필요합니다. 이는 원격 디스플레이 관리자가 사용하는 X Authority 파일에 액세스하여 찾을 수 있습니다. 사용 ps aux
하고 찾을 수 있는 디스플레이 관리자에 따라 다릅니다 grep
. 예를 들어 psaux | grep Xorg
다음과 같은 내용을 제공합니다.
/usr/libexec/Xorg -background none :0 -seat seat0 -auth /var/run/lightdm/root/:0 -listen tcp vt1 -noswitch
-auth
이 옵션을 사용하려면 VNC가 필요하므로 기록해 두십시오 . root
설치 후에는 원격 시스템에서 다음과 같은 명령을 실행해야 합니다 x11vnc
.
/usr/bin/x11vnc -norc -forever -shared -bg -autoport 5900 -auth /var/run/lightdm/root/:0
가장 쉬운 방법은 시작 시 이를 실행하는 서비스를 만드는 것입니다. 사용 중인 배포판에서 systemd
다음과 유사한 파일을 만듭니다./etc/systemd/system/x11vnc.service
[Unit]
Description=VNC Server for X11
Requires=display-manager.service
After=display-manager.service
[Service]
Type=forking
ExecStart=/usr/bin/x11vnc -norc -forever -shared -bg \
-autoport 5900 \
-rfbauth /etc/x11vnc.pass \
-o /var/log/x11vnc.log \
-auth /var/run/lightdm/root/:0
[Install]
WantedBy=graphical.target
-rfbauth
이 옵션 에 주의하시기 바랍니다 . 다음 명령을 사용하여 미리 비밀번호 파일을 생성해야 합니다.
$ sudo x11vnc -storepasswd /etc/x11vnc.pass
또는 비밀번호로 보호된 VNC 세션이 필요하지 않다고 생각되면 해당 -rfbauth
줄을 삭제하면 됩니다.
시작 시 활성화:
$ sudo systemctl enable x11vnc.service
수동으로 시작하세요.
$ sudo systemctl start x11vnc.service
이제 VNC 클라이언트를 사용하여 원격 컴퓨터에 연결하고 세션을 인계받을 수 있습니다.