diff --git a/vnc/create_vnc_autostarrt.sh b/vnc/create_vnc_autostarrt.sh index 3408f16..a13967e 100644 --- a/vnc/create_vnc_autostarrt.sh +++ b/vnc/create_vnc_autostarrt.sh @@ -81,6 +81,7 @@ while IFS=':' read -r username password; do #[Install] #WantedBy=multi-user.target # 写入专属的 systemd 服务配置 + # 写入专属的 systemd 服务配置 cat < "$SERVICE_FILE" [Unit] Description=Remote desktop service (VNC) @@ -88,16 +89,20 @@ After=syslog.target network.target [Service] Type=forking - -# Clean any existing files in /tmp/.X11-unix environment +# 核心修复点 1:除了常规 kill,强制移除残留的 X 锁文件和套接字 ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :$DISPLAY_NUM > /dev/null 2>&1 || :' +ExecStartPre=/bin/sh -c 'rm -f /tmp/.X11-unix/X$DISPLAY_NUM /tmp/.X$DISPLAY_NUM-lock' + ExecStart=/usr/sbin/runuser -l $username -c "/usr/bin/vncserver :$DISPLAY_NUM" -PIDFile=/home/$username/.vnc/%H$DISPLAY_NUM.pid + +# 核心修复点 2:修复 PIDFile 路径拼接(通常格式是 hostname:display.pid) +PIDFile=/home/$username/.vnc/%H:$DISPLAY_NUM.pid + ExecStop=/bin/sh -c '/usr/bin/vncserver -kill :$DISPLAY_NUM > /dev/null 2>&1 || :' [Install] WantedBy=multi-user.target -EOF +EOF # 步骤 D: 启用并启动服务 # 重新加载 systemd 守护进程以识别新文件