![Ubuntu 22.04 桌面上的 x11vnc 似乎坏了](https://linux22.com/image/1187345/Ubuntu%2022.04%20%E6%A1%8C%E9%9D%A2%E4%B8%8A%E7%9A%84%20x11vnc%20%E4%BC%BC%E4%B9%8E%E5%9D%8F%E4%BA%86.png)
安装 Ubuntu 22.04 的新物理实例会导致出现 Wayland 桌面。我在登录对话框中将其切换为 x11(选择“gear”,选择 xorg)。此解决方案适用于运行 22.04 的虚拟机,但似乎无法修复我的物理设备的任何问题。“连接意外关闭”。如果您有任何建议,请告知。我的 x11vnc 配置与 xinetd 在 20.04 上运行良好。
/etc/xinetd.d/x11vnc
service x11vnc
{
port = 5900
type = UNLISTED
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/bin/x11vnc
server_args = -inetd -o /var/log/x11vnc.log -display :0 -auth /run/user/1000/gdm/Xauthority -many -bg
disable = no
}
答案1
这在 Ubuntu 22.04 上对我有用
删除 WaylandEnable=false 前面的 #,如下所示:
sudo apt install x11vnc
sudo perl -i.bk -pe's/#(WaylandEnable=false)/$1/' /etc/gdm3/custom.conf
重新启动远程计算机以重新启动 X,可能存在更快捷的方法:
sudo shutdown -r now
然后以非 root 用户身份登录身体的远程桌面。
然后通过 ssh 连接到远程:
ssh -L5901:127.0.0.1:5900 me@remote
然后运行这个(注意:1 而不是:0,后者在以前的 ubuntu 中有效)
x11vnc -display :1 -nopw -noxdamage -passwd po -scale 17/17 -ncache 10 &
在本地计算机上的 Remmina 中我将其配置为服务器:
127.0.0.1:5901
答案2
有两种基本方法可以让 x11vnc 提供远程桌面:
- 登录机器,然后通过命令行启动 x11vnc
这仅当您具有对机器的物理访问权限时才有效
- 创建在机器启动时启动 x11vnc 的启动脚本
这使您可以完全远程访问您的机器,并且在您登录后,登录“欢迎”可用,然后是远程桌面。
由于 Ubuntu 17 (2) 需要运行,因此需要设置一个黑客解决方案,因为“greeter”和“user”使用不同的 X11 DISPLAY,并且 Xorg 服务器实例在不同的用户 ID (uid) 下运行,“greeter”的用户 == gdm,远程桌面的 YOUR_USER_ACCOUNT。
结果是您需要运行两个单独的服务:
- “greeter” x11vnc 服务在其自己的 TCP 端口上(我使用 5902)
- 用户桌面 x11vnc 服务在其自己的 TCP 端口上(我使用标准端口 5900)
另一个复杂因素是,多年来,Xauthourity 令牌一直位于用户主目录下的 .X11/Xauthority 中,现在它保存在:/run/user//gdm/Xauthority
黑客攻击的结果是需要首先连接到 VNC 端口 5902 以通过“greeter”登录,然后关闭该窗口并通过 VNC 端口 5900 连接到桌面。
这是“greeter”(登录)和桌面的示例 systemd 启动脚本。
GREETER(启动脚本):
$ cat /lib/systemd/system/x11vnc-login.service
[Unit]
Description=Start x11vnc at startup.
After=multi-user.target
[Service]
Type=simple
User=gdm <<=== Ubuntu 21.04 need process DISPLAY owner id
ExecStart=/usr/bin/x11vnc -auth /run/user/126/gdm/Xauthority -forever -loop -repeat -rfbauth /home/gdm/.vnc/passwd -rfbport 5902 -shared -display :0
[Install]
WantedBy=multi-user.target
DESKTOP(启动脚本):
$ cat /lib/systemd/system/x11vnc.service
[Unit]
Description=Start x11vnc at startup.
After=multi-user.target
[Service]
Type=simple
User=WHO <<=== Now the session user
ExecStart=ExecStart=/usr/bin/x11vnc -auth /run/user/1XXX/gdm/Xauthority -forever -loop -noxdamage -repeat -rfbauth /home/WHO/.vnc/passwd -rfbport 5900 -shared -xkb -display :1
#
# Or if you have a problem with keys not working you might
# need to add: -skip_keycodes CODE,CODE... flag
# See below for more details
#
[Install]
WantedBy=multi-user.target
添加 systemd 脚本后,您应该启用/启动:
# sudo systemctl enable x11vnc-login
# sudo systemctl enable x11vnc
# sudo systemctl start x11vnc-login
# sudo systemctl start x11vnc
哦,是的,为了使其工作,您必须禁用“Wayland”,因为 x11vnc 仅适用于 X11,而不适用于 Wayland。
通过编辑 /etc/gdm3/custom.conf 并设置 WaylandEnable=false 禁用“Wayland”显示管理器
由于这个问题在每次 Ubuntu 更新时都会“习惯性”地出现,因此我在我的博客中记录了诊断和修复的详细信息(以供将来参考):https://tips.graphica.com.au/ubuntu-and-remote-gnome-desktop/