当前主机确认:
当前已有 X11 桌面环境,显示 Xorg 正在运行
被控 Ubuntu 主机已显示被控弹窗,说明网络联通,ToDesk 正常运行
在 Ubuntu 查看 2 minutes age 的 ToDesk 日志:
sudo journalctl \ -u todeskd.service \ --since "2 minutes ago" \ --no-pager | grep -Ei 'authorization|display|x11|capture|error|failed'输出:
X月 X 21:03:21 mc ToDesk_Service[44714]: Authorization required, but no authorization protocol specified
确认:
ToDesk_Service 已经找到 X11 显示器,但没有拿到访问
:0的 X11 授权信息
解决方案:
在 Ubuntu 终端执行:
echo "TYPE=$XDG_SESSION_TYPE" echo "DISPLAY=$DISPLAY" echo "XAUTHORITY=$XAUTHORITY" xhost +SI:localuser:root(
xhost +SI:localuser:root只允许本机 root 用户连接 X Server,比不安全的xhost +范围小得多;X11 支持通过localuser方式授权本地用户。)显示:
localuser:root being added to access control list重启:
sudo systemctl restart todeskd.service sleep 3 sudo journalctl -u todeskd.service --since "10 seconds ago" --no-pager重连,连接成功
重启后保持
从前面的日志看,成功的关键是:
todeskd能找到DISPLAY=:0和/home/mc/.Xauthority;当前 X11 会话允许 root 身份的 ToDesk 服务访问屏幕:
xhost +SI:localuser:root其中第 1 项可以写进 systemd;第 2 项需要在每次 GNOME/X11 登录后自动执行,因为xhost授权通常会随图形会话结束而失效。
1. 固化 ToDesk 服务的 X11 环境
执行一次:【此处 mc 为用户名,替换为自己的用户名】
sudo mkdir -p /etc/systemd/system/todeskd.service.d sudo tee /etc/systemd/system/todeskd.service.d/x11.conf >/dev/null <<'EOF' [Service] Environment="DISPLAY=:0" Environment="XAUTHORITY=/home/mc/.Xauthority" EOF sudo systemctl daemon-reload sudo systemctl enable todeskd.service sudo systemctl restart todeskd.service验证:
sudo systemctl show todeskd.service -p Environment应该包含:【此处 mc 为用户名,替换为自己的用户名】
DISPLAY=:0 XAUTHORITY=/home/mc/.Xauthority2. 每次登录 GNOME 时自动添加 X11 授权
创建启动脚本:
mkdir -p ~/.local/bin ~/.config/autostart cat > ~/.local/bin/todesk-x11-prepare.sh <<'EOF' #!/bin/sh export DISPLAY=:0 export XAUTHORITY="$HOME/.Xauthority" # 等待 Xorg 和认证文件准备完成 i=0 while [ "$i" -lt 30 ]; do if [ -S /tmp/.X11-unix/X0 ] && [ -f "$XAUTHORITY" ]; then break fi i=$((i + 1)) sleep 1 done /usr/bin/xhost +SI:localuser:root EOF chmod +x ~/.local/bin/todesk-x11-prepare.sh创建 GNOME 自动启动项:
cat > ~/.config/autostart/todesk-x11-prepare.desktop <<'EOF' [Desktop Entry] Type=Application Name=ToDesk X11 Access Comment=Allow the ToDesk system service to access the local X11 session Exec=/home/mc/.local/bin/todesk-x11-prepare.sh Terminal=false X-GNOME-Autostart-enabled=true NoDisplay=true EOF以后每次mc登录 Ubuntu 桌面,都会自动执行:
xhost +SI:localuser:root不要改成:
xhost +后者会过度放宽 X11 访问权限。
3. 确保一直使用 X11,不要切回 Wayland
检查/etc/gdm3/custom.conf:
sudo nano /etc/gdm3/custom.conf确保存在:
[daemon] WaylandEnable=false然后:
sudo systemctl restart gdm3注意:这会结束当前桌面会话。现在已经正常时,不必立即重启 GDM,可以等下次正常重启机器。
登录后验证:
echo "$XDG_SESSION_TYPE"应输出:
x114. 无人值守重启后的问题
上面的自动授权只有在mc登录 GNOME 后才会执行。如果电脑重启后停留在登录界面,可能还不能稳定远控。
需要无人值守重启后自动恢复,可选择开启自动登录:
sudo nano /etc/gdm3/custom.conf配置为:【此处 mc 为用户名,替换为自己的用户名】
[daemon] WaylandEnable=false AutomaticLoginEnable=true AutomaticLogin=mc这样重启后流程会自动完成:
启动 Ubuntu → 自动登录 mc → 建立 X11 桌面 → 执行 xhost 授权 → ToDesk 可以采集桌面自动登录会降低物理安全性。若机器所在位置不安全,建议不开启,并在重启后先本地登录一次。
5. 现在进行一次完整重启测试
趁你在 Ubuntu 主机旁边,建议直接测试:
sudo reboot重启并进入桌面后检查:
echo "session=$XDG_SESSION_TYPE display=$DISPLAY" xhost | grep -F 'SI:localuser:root' && echo "ToDesk X11 授权正常" sudo systemctl is-active todeskd.service期望看到:
session=x11 display=:0 SI:localuser:root ToDesk X11 授权正常 active随后再从 Windows 发起连接。
日后连接失败时的一键恢复命令
通过 SSH 执行:【此处 mc 为用户名,替换为自己的用户名】
DISPLAY=:0 \ XAUTHORITY=/home/mc/.Xauthority \ xhost +SI:localuser:root sudo systemctl restart todeskd.service如果仍失败,确认本地图形用户还处于登录状态:
loginctl list-sessions应存在类似:
mc seat0 tty7 active完成以上配置后,只要保持X11 会话、mc已登录、ToDesk 服务运行,下次连接通常不需要再手动执行授权。
使用当前最新的 ToDesk,Ubuntu 24.04.3 LTS