如何配置 x11vnc.service 以 root 身份运行 x11vnc?

如何配置 x11vnc.service 以 root 身份运行 x11vnc?

我想远程访问我的“真实”显示器。基本上使用我的 MacBook 来控制我在本地服务器显示屏上看到的内容。我的目标是复制相同的图像:在 Linux 机器的实际显示屏上以及通过 MacBook 上的 VNC。我正在运行 Ubuntu 20.04,现在是 2020 年 11 月。

作为这家伙非常诗意地说“我安装了nomachine,总共花了2分钟的时间来设置,并且它按我想要的方式工作”。

该链接还解释了你必须切换到 lightdm。很好。

如果我尝试:

/usr/bin/x11vnc -display :0 -auth guess

我得到:

22/11/2020 20:23:51 x11vnc version: 0.9.16 lastmod: 2019-01-05  pid: 4745
22/11/2020 20:23:51 -auth guess: failed for display=':0'

如果我尝试:

/usr/bin/x11vnc -display :0 

我得到:

22/11/2020 20:29:26 x11vnc version: 0.9.16 lastmod: 2019-01-05  pid: 5167
Invalid MIT-MAGIC-COOKIE-1 key22/11/2020 20:29:26 XOpenDisplay(":0") failed.
22/11/2020 20:29:26 Trying again with XAUTHLOCALHOSTNAME=localhost ...
Invalid MIT-MAGIC-COOKIE-1 key
22/11/2020 20:29:26 ***************************************
22/11/2020 20:29:26 *** XOpenDisplay failed (:0)

*** x11vnc was unable to open the X DISPLAY: ":0", it cannot continue.
*** There may be "Xlib:" error messages above with details about the failure.

如果我尝试:

sudo /usr/bin/x11vnc -display :0

我得到:

22/11/2020 20:30:22 x11vnc version: 0.9.16 lastmod: 2019-01-05  pid: 5171
No protocol specified
22/11/2020 20:30:22 XOpenDisplay(":0") failed.
22/11/2020 20:30:22 Trying again with XAUTHLOCALHOSTNAME=localhost ...
No protocol specified

22/11/2020 20:30:22 ***************************************
22/11/2020 20:30:22 *** XOpenDisplay failed (:0)

*** x11vnc was unable to open the X DISPLAY: ":0", it cannot continue.
*** There may be "Xlib:" error messages above with details about the failure.

最后如果我尝试:

sudo /usr/bin/x11vnc -display :0 -auth guess

我得到:

22/11/2020 20:32:24 x11vnc version: 0.9.16 lastmod: 2019-01-05  pid: 5188
xauth:  file /root/.Xauthority does not exist
22/11/2020 20:32:24 -auth guess: using 'XAUTHORITY=/var/run/lightdm/root/:0' for disp=':0'
22/11/2020 20:32:24 Using X display :0
22/11/2020 20:32:24 rootwin: 0x583 reswin: 0x600001 dpy: 0xfd57d280
The VNC desktop is:      NAS:0
PORT=5900

太棒了!

但是现在我如何才能让 x11vnc 在没有 sudo 的情况下运行,以便它可以使用 systemd 自动运行?

这是我现在的/etc/systemd/system/x11vnc.service

# Description: Custom Service Unit file
# File: /etc/systemd/system/x11vnc.service
[Unit]
Description="x11vnc"
Requires=display-manager.service
After=display-manager.service

[Service]
ExecStart=/usr/bin/x11vnc -loop -nopw -xkb -repeat -noxrecord -noxfixes -noxdamage -forever -rfbport 5900 -display :0 -auth guess
ExecStop=/usr/bin/killall x11vnc
Restart=on-failure
RestartSec=2

[Install]
WantedBy=multi-user.target

关于这个话题还有两个有趣的链接:一个带有x11vnc一个与TigerVNC

答案1

您可以尝试添加-auth /run/lightdm/root/:0而不是guess,因为对于大多数发行版/显示管理器来说,这已经是相当长一段时间的默认路径了。

如果这没有帮助,那么似乎存在竞争条件,尽管您通过服务文件强制执行了顺序。也许显示管理器服务在一切正常启动之前就发出了“就绪”信号。一个不太好但有效的解决方法是添加到ExecStartPre=/bin/sleep 5您的服务中以确保 X11 正常启动并运行。

TigerVNC 软件包 ( ) 中还有 libvnc.so apt install tigervnc-xorg-extension,这是一个可以直接加载到 X11 服务器中的模块。理论上,这应该能带来最佳性能,但上次我尝试时,一些应用程序(如 VMware Player)在远程显示为黑色窗口时出现了问题。

用内容创建/etc/X11/xorg.conf.d/10-vnc.conf

Section "Module" 
Load "vnc" 
EndSection

Section "Screen" 
Identifier "Screen0" 
Option "UserPasswdVerifier" "VncAuth" 
Option "PasswordFile" "/path/to/passwd" 
EndSection

在哪里/path/to/passwd通过命令创建vncpasswd

相关内容