为什么 x0vncserver 没有在启动时启动?

为什么 x0vncserver 没有在启动时启动?

我尝试使用 wiki 在自动 GUI 登录设置中使ightvncserver 在抛物线拱门 Gnu/Linux 上启动时启动https://wiki.archlinux.org/index.php/TigerVNC#Using_tigervnc.27s_x0vncserver并通过创建 x0vncserver.service systemd 单元,然后systemctl enable x0vncserver.service但是当我启动/重新启动时,我看到没有 vnc 服务器处于活动状态,然后检查我看到这个

# systemctl status x0vncserver.service
* x0vncserver.service - 远程桌面服务(VNC)
   已加载:已加载(/etc/systemd/system/x0vncserver.service;启用;供应商预设:禁用)
   活跃:自 2017-07-01 星期六 20:42:55 +06 起不活跃(死亡); 1分34秒前
  进程:302 ExecStart=/usr/bin/sh -c /usr/bin/x0vncserver -display :0 -rfbport 5900 -passwordfile /home/peruvian/.vnc/passwd & (code=exited, status=0/SUCCESS)

Jul 01 20:42:52 sky systemd[1]:正在启动远程桌面服务(VNC)...
Jul 01 20:42:55 sky systemd[1]:启动远程桌面服务(VNC)。

和我的

#journalctl-xe| grep vnc
-- 主题:单元 x0vncserver.service 已开始启动
-- 单元 x0vncserver.service 已开始启动。
-- 主题:单元 x0vncserver.service 已完成启动
-- 单元 x0vncserver.service 已完成启动。
Jul 01 20:47:08 sky systemd[1]: x0vncserver.service: 主进程退出,代码=退出,状态=1/FAILURE
Jul 01 20:47:08 sky systemd[1]: x0vncserver.service: 单元进入失败状态。
7 月 1 日 20:47:08 sky systemd[1]:x0vncserver.service:失败,结果为“退出代码”。

但如果我运行命令systemctl start x0vncserver.servicesystemctl restart x0vncserver.service加载桌面后,它就可以正常工作,如下# systemctl status x0vncserver.service所示

# systemctl status x0vncserver.service
* x0vncserver.service - 远程桌面服务(VNC)
   已加载:已加载(/etc/systemd/system/x0vncserver.service;启用;供应商预设:禁用)
   活跃:自 2017-07-01 20:56:53 +06 星期六起活跃(运行); 2秒前
  进程:924 ExecStart=/usr/bin/sh -c /usr/bin/x0vncserver -display :0 -rfbport 5900 -passwordfile /home/peruvian/.vnc/passwd & (code=exited, status=0/SUCCESS)
 主PID:925(x0vncserver)
    任务:1(限制:4915)
   CGroup:/system.slice/x0vncserver.service
           `-925 /usr/bin/x0vncserver -display :0 -rfbport 5900 -passwordfile /home/peruvian/.vnc/passwd

Jul 01 20:56:53 sky systemd[1]:正在启动远程桌面服务(VNC)...
Jul 01 20:56:53 sky systemd[1]:启动远程桌面服务(VNC)。

我的 default.target 是

# systemctl 获取默认值       
图形目标

我猜该服务比预期更早启动,并且由于启动时缺乏资源而失败。

答案1

有点晚了,但我也偶然发现了这个问题。

问题是,x0vncserver 需要您的用户登录 X 会话,因此您必须确保两件事:

  1. 您的用户必须是配置为自动登录

  2. 在命令中设置睡眠ExecStart,以便桌面可以在x0vncserver服务尝试启动之前启动并登录:

    ExecStart=/usr/bin/sh -c 'sleep 3 && /usr/bin/x0vncserver -display :0 -rfbport 5900 -passwordfile /home/<您的用户名>/.vnc/passwd &'

睡眠对我起了作用,现在我的x0vnc工作开始了。

答案2

由于x0vncserver只会在 xsession 之后启动,并且由于我的是 LXDE 环境,因此更简单的方法是创建script.sh如下文件

#!/bin/bash
x0vncserver -display :0 -rfbport 5900 -passwordfile ~/.vnc/passwd

并使其可执行sudo chmod +x script.sh并在文件中添加一行~/.config/lxsession/LXDE/autostart,如下所示

path_to_the_script_file/script.sh

x0vncserver我的 LXDE 桌面会话启动时,这就是我所需要的。

相关内容