我想远程访问我的“真实”显示器。基本上使用我的 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
。