나는 원격 컴퓨터를 열고 물리적으로 존재하지 않고도 액세스할 수 있도록 Debian 컴퓨터에서 서비스로 실행되는 VNC 서버를 설정하고 싶습니다.
한 가지 옵션은 사용자 버스에서 설정하는 것입니다.
$ systemctl --user cat vnc.service
# /home/stew/.config/systemd/user/vnc.service
[Unit]
Description=VNC Server
After=default.target
[Service]
ExecStart=x11vnc -nevershared -forever -nopw
[Install]
WantedBy=default.target
이 방법은 작동하지만 원격 작업을 수행 gdm3
하려면 여전히 터미널에 물리적으로 앉아 로그인해야 합니다 . login 을 사용하기 전에 로그인 XAUTHORITY
하면 서비스가 실패합니다. 나는 and 를 사용 하여 이 문제를 해결했습니다 .ssh
gdm3
AutomaticLoginEnable=True
AutomaticLogin=stew
/etc/gdm3/daemon.conf
대신, 먼저 특정 사용자로 로그인하지 않고도 VNC를 사용할 수 있기를 원합니다(RDP와 유사). 가장 좋은 방법은 화면에 -nopw
액세스하는 것입니다.gdm3
나는 이것을 시도한다:
$ systemctl cat vnc.service
# /etc/systemd/system/vnc.service
[Unit]
Description=VNC Service (system-wide)
After=graphical.target
[Service]
ExecStart=x11vnc -auth /run/user/116/gdm/Xauthority -display :0 -nopw
[Install]
WantedBy=graphical.target
116
경로가 UID (System User:) 소유임을 보여주는 이 명령을 사용하여 XAUTHORITY 경로를 찾았습니다 Debian-gdm
.
stew ~ $ ps wwwwaux | grep auth
root 1033 0.1 0.5 189548 63596 tty1 Sl+ 14:32 0:00 /usr/lib/xorg/Xorg vt1 -displayfd 3 -auth /run/user/116/gdm/Xauthority -nolisten tcp -background none -noreset -keeptty -novtswitch -verbose 3
VNC가 Wayland와 작동하지 않는 것 같아서 WaylandEnable=false
계속 설정해야 합니다 ./etc/gdm3/daemon.conf
언뜻 보면 이것이 효과가 있는 것 같습니다. gdm
로그인 화면이 보입니다 . 그런데 해당 사용자로 로그인을 시도하면 정보가 auth
다른 사용자에게 이전되어 연결이 끊어집니다.
gdm을 통해 로그인할 수 있도록 VNC를 설정하는 방법이 있습니까?
답변1
완벽하지는 않지만 여기에 해결책이 있습니다.
VNC를 실행하는 서비스로 시작하여 GDM 로그인 화면에 연결합니다.
$ systemctl cat vnc-gdm.service
# /etc/systemd/system/vnc-gdm.service
[Unit]
Description=VNC Server (gdm)
After=graphical.target
[Service]
ExecStart=bash -c 'x11vnc -auth /run/user/$(id -u Debian-gdm)/gdm/Xauthority -display :0 -nopw'
Restart=on-failure
RestartSec=3
[Install]
WantedBy=graphical.target
그런 다음 지원하려는 각 사용자에 대해 다른 VNC 서비스를 추가합니다. 인스턴스는 2초마다 폴링하여 ExecStartPre=
이 사용자에 대한 인스턴스가 있는지 확인합니다 Xorg
. 이런 일이 발생하면 자체 인스턴스가 바인딩될 수 있도록 vnc-gdm.service
포트 해제를 중지합니다.5900
x11vnc
그런 다음 실행되었습니다 x11vnc
.
$ systemctl cat vnc-stew.service
# /etc/systemd/system/vnc-stew.service
[Unit]
Description=VNC Server (stew)
After=graphical.target
[Service]
User=stew
ExecStartPre=sh -c 'while ! pgrep -U stew Xorg; do sleep 2; done'
ExecStartPre=+systemctl stop vnc-gdm.service
ExecStart=x11vnc -many -shared -display :1 -auth /home/stew/.Xauthority -rfbauth /home/stew/.vnc/passwd
Restart=on-failure
RestartSec=3
[Install]
WantedBy=graphical.target
일단 gdm을 통해 로그인하면 연결이 끊어지고 새 모니터에 다시 연결해야 하기 때문에 원활하지 않다고 말합니다. 여러 사용자를 대상으로 테스트하지도 않았습니다. 또한 X 세션에서 로그아웃하면 다시 로그인할 수 없을 것이 확실합니다.
나도 우리가 systemctl stop
하는 일이 마음에 들지 않아요 ExecStartPre=
.
답변2
Gnome 데스크탑을 실행하는 Debian 11(Bullseye)에서 Stewart의 서비스 정의는 gdm hello 세션(위의 Stewart의 첫 번째 코드 블록)에서 x11vnc를 실행하는 데 사용됩니다.거의나에게는 작동하지만 x11nvc가 개인 리소스에 액세스할 수 없다고 불평하면서 실패합니다. "sudo -u Debian-gdm"을 삽입하여 문제를 해결했는데 결과는 다음과 같습니다.
...
ExecStart=bash -c 'sudo -u Debian-gdm x11vnc -auth /run/user/$(id -u Debian-gdm)/gdm/Xauthority -display :0 -nopw'
...
답변3
때때로 (항상 그런 것은 아니지만) 재부팅 후에 작동하지 않습니다. 테스트를 했지만 -display:1 대신 -display:0을 설정하면 루트 1명과 사용자 2명이 생성되는 것처럼 보이고 작동할 준비가 된 것입니다. Ubuntu 22.04에서 -display :1을 사용해야 한다고 생각했지만 -display :0은 실제로 작동하지만 -display :1은 작동하지 않는 것 같습니다. 표시된 두 사용자는 다른 CGroup 번호로 로그인한 동일한 사용자(사용자 1000)일 수 있습니다. 이유는 모르겠지만 작동합니다. 로그인하기 전에 연결하는 기능을 얻으려고 계속 노력하고 있지만 쉽지 않을 것 같으며 최소한 해결 방법이 있습니다.
사용스티브의 대답, Ubuntu 22.04를 사용하면 거의 달성할 수 있습니다. 귀하가 로그인하지 않은 상태에서 이 작업을 시도했지만 현재 작동하지 않는다는 점은 주목할 가치가 있습니다. 이 경우 다른 사용자가 필요하며 몇 가지 가능한 해결 방법이 있다는 것을 알고 있습니다. 다음 작업은 이미 로그인한 경우에만 작동합니다.
적어도 나에게는 이로 인해 x11vnc가 실제로 Ubuntu 22.04의 x11(Wayland는 아님)과 작동하게 됩니다.
이미 SSH를 사용 중 - 포트 5900
sudo apt-get install x11vnc net-tools
x11vnc에 대해 다소 낮은 품질의 전체 비밀번호를 설정하십시오.
x11vnc -storepasswd
가까운 길목
cd /etc/gdm3
nano custom.conf
Waylandnable=false의 주석 처리를 해제하세요.
sudo nano /etc/systemd/system/x11vnc.service
다음 파일을 만듭니다(자신의 사용자 이름을 입력해야 하며, PUTLOGGEDINUSERNAMEHERE
이 작업을 수행하려면 현재 사용자 이름을 두 번 입력해야 합니다).
[Unit]
Description=Start x11vnc at startup on Ubuntu 22.04 and x11 not Wayland.
After=multi-user.target
[Service]
Type=simple
ExecStart=bash -c 'sudo -u PUTLOGGEDINUSERNAMEHERE /usr/bin/x11vnc -display :0 -auth /run/user/1000/gdm/Xauthority -rfbauth /home/PUTLOGGEDINUSERNAMEHERETOO/.vnc/passwd -rfbport 5900'
ExecStop=/usr/bin/killall x11vnc
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
그 다음에
sudo systemctl daemon-reload
systemctl start x11vnc.service
아니면 이미 실행 중이라면
sudo systemctl daemon-reload
systemctl restart x11vnc.service
그런 다음 실제로 SSH를 통해 포트 22에 연결하고 실제로 x11vnc에 연결할 수 있어야 합니다.
-display :0이 현재 대부분의 경우 작동하는 것 같고 -display :1은 작동하지 않는 이유가 확실하지 않지만 -display:0 및 Ubuntu 데스크탑을 제안하고 항상 부팅되는 것 같습니다. 아쉽게도 자동으로 로그인해야 하지만 언제든지 즉시 화면을 잠글 수 있으며 x11vnc는 계속 작동합니다.
상태도 확인할 수 있어요
systemctl status x11vnc.service
최근 100개의 기록을 볼 수 있습니다.
journalctl -u x11vnc.service -n 100
왜 던지는지 완전히 확신할 수 없습니다.
ubuntuuser x11vnc[34174]: Libgcrypt warning: missing initialization - please fix the application
그러나 적어도 전체 x11vnc는 실제로 Ubuntu 22.04에서 작동하며 이를 파악하는 데 거의 하루가 걸렸습니다. 다른 사람이 이 문제에 직면할 경우를 대비해 공유하고 싶었지만 여기에서 구체적으로 볼 수 없는 것이 있는지 확실하지 않았습니다.
사용자 gdm은 이제 사용자 126입니다. 왜? 모르겠지만 위 링크에 보이는 120은 아닙니다.
로그인하기 전에 실제로 사용할 수 없는 이유를 알아보려고 합니다. 이유 중 일부는 루트로 명령을 실행해야 하는데 /bin/sh -c sudo를 사용해야 하기 때문인 것 같습니다. 'ExecStart 명령을 사용하여 실제로 그렇게 합니다.
또한 더 중요한 것은 기본 사용자가 1000으로 표시되고 제자리에 있지만 gdm은 그렇지 않다는 것입니다. 이것이 아마도 로그인을 시도할 때 해당 사용자를 할당할 수 없는 이유일까요?
sudo ls -la /run/user/126/gdm
비어 있는.
sudo ls - la /run/user/1000/gdm
사용자가 1000 및 Xauthority에 있음을 표시하지만 gdm에는 아무것도 표시되지 않습니다.
현재 제가 이해하는 수준을 넘어서기 시작했지만 이전 버전의 Ubuntu와 달리 gdm 사용자에게는 지난 몇 번의 Ubuntu 릴리스의 표준이었던 100, 106 또는 120이 할당되는 것 같습니다. 아마도 이전에는 작동했지만 로그인하기 전에 작동하도록 설정할 수 없는 이유와 관련이 있을 수 있습니다.
때로는 x11vnc.service를 시작한 다음 /etc/systemd/systemx11vnc.service 파일을 편집하고 이를 display :0에서 display :1로 변경한 다음 두 번째 파일을 추가할 수 있습니다(기술적으로는 sudo -u start로 시작한 이후 세 번째 파일). ) 사용자가 갑자기 작동했습니다. 어쨌든 항상 display :1을 사용해야 합니다. 왜 새 CGroup에 두 번째 사용자를 추가하는지 잘 모르겠지만 x11vnc.service를 다시 시작할 때 항상 작동하는 것 같습니다.
명확히 하자면, Ubuntu 22.04를 사용하면 x11vnc에 대한 몇 가지 사항이 변경된 것 같으니 적어도 그 점을 염두에 두시기 바랍니다. x11vnc에서 특히 문제가 되는 지난 몇 가지 버전의 일부 변경 사항과 해당 특정 버전에서만 작동하는 코드가 상당히 많이 있음을 확인했습니다.
마지막으로 X 커서가 있지만 Ubuntu 데스크탑과 Windows 상단에만 있습니다. 터미널 위로 이동하면 점이 있는 일반 마우스 커서로 변합니다.
도움이 된다면 실제로 작동하는 모습을 보여주는 추가 코드가 있습니다. sudo가 아닌 버전이 표시되면 실행되지 않고 루프만 발생하는 것입니다. 두 개가 보이면 실행 중이며 연결할 수 있는 것입니다.
x11vnc.service - Start x11vnc at startup.
Loaded: loaded (/etc/systemd/system/x11vnc.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-06-01 19:30:40 EDT; 2s ago
Main PID: 2734 (sudo)
Tasks: 3 (limit: 9354)
Memory: 9.1M
CPU: 88ms
CGroup: /system.slice/x11vnc.service
\u251c\u25002734 sudo -u ubuntuuser/usr/bin/x11vnc -noxrecord -noxfixes -auth /run/user/1000/gdm/Xauthority -forever -loop >
\u251c\u25002735 /usr/bin/x11vnc -noxrecord -noxfixes -auth /run/user/1000/gdm/Xauthority -forever -loop -noxdamage -rfbaut>
\u2514\u25002736 /usr/bin/x11vnc -noxrecord -noxfixes -auth /run/user/1000/gdm/Xauthority -forever -loop -noxdamage -rfbaut>
Jun 01 19:30:41 ubuntuuser bash[2736]: The VNC desktop is: ubuntuuser:5900
Jun 01 19:30:41 ubuntuuser bash[2736]: 01/06/2022 19:30:41 possible alias: ubuntuuser::5900
Jun 01 19:30:41 ubuntuuser bash[2736]: PORT=5900
Jun 01 19:30:41 ubuntuuser bash[2736]: ******************************************************************************
때로는 최상의 재현 방법을 완전히 확신할 수 없지만 연결된 상태에서 x11vnc.service를 다시 시작하려고 시도하면 터미널이 정지되고 응답이 중지될 수 있습니다. 그런 다음 종료하면 sudo와 두 CGroup 사용자 중 한 명이 제거되지만 그 중 한 명은 남아 있고 x11vnc.service는 녹색에서 흰색으로 변경됩니다. 서비스를 다시 시작하면 총 3명의 사용자가 복원되므로 다시 연결하기만 하면 됩니다. 또한 이상하게도 -display :0 설정을 지정하면 일반적으로 여전히 작동합니다. -display :1 이어야 한다는 인상을 받았지만 누가 알겠습니까? 더 많은 테스트를 통해 -display :0이 부팅 시 작동할 가능성이 더 높은 것으로 나타났습니다.
x11vncA.service의 두 번째 버전을 추가하여 부팅 시 실행하고 다른 포트나 다른 모니터를 열려고 시도했지만 항상 실패하고 "로드됨: 로드됨" 모드로 들어가다가 비활성화되는 것 같습니다. 다른 하나는 작동 중이지만. 다양한 시작 지점(multi-user.target 대신 graphic.target)을 시도했지만 어떤 이유로 작동했기 때문에 multi-user.target에 그대로 두었습니다. 왜 이렇게 시작됐나요? -display:0에서 시작한 다음 어떻게든 -display:1에서 실행해야 하는지 추측해 보면 결국에는 계속 시작되지만 어떻게 작동해야 하는지는 확실하지 않습니다. 그냥 Gnome 기반의 :1 데스크탑을 원하세요!
다음은 로그인 시 유사한 설정을 위한 몇 가지 잠재적인 시작점입니다. 현재는 작동하지 않지만 최소한 Ubuntu 22.04에서는 x11vnc를 사용할 수 있습니다.
당신은 또한 볼 수 있습니다Ubuntu 18.04 LTS x11vnc가 더 이상 작동하지 않습니다..
x11vnc.service를 생성하세요. 자동으로 로그인한다고 가정하면 이 작업을 수행하는 데 필요한 전부인 것 같기 때문입니다. 하지만 이 작업을 수행하려면 GUI와 실제 데스크탑을 시작하기 전에 다른 것을 시도해야 할 것 같습니다.