单位档案

单位档案

单元文件在手动启动时起作用。systemctl --user enable用户登录后不会自动启动该服务。

单位档案

[Unit]
Description = VNC Duplicate Display RDP
After = default.target

[Service]
Type = simple
ExecStart = /opt/tigervnc/usr/bin/x0vncserver -passwordfile /etc/.vncpasswd -display :0
TimeoutSec = 30
RestartSec = 10
Restart = always

[Install]
WantedBy = default.target

我已重新加载并重新启用该装置

$ systemctl --user daemon-reload
$ systemctl --user reenable x0vncserver

地位

用户登录后的状态

● x0vncserver.service - VNC Duplicate Display RDP
   Loaded: loaded (/usr/lib/systemd/user/x0vncserver.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

目标状态

$ systemctl --user --type target
UNIT           LOAD   ACTIVE SUB    DESCRIPTION
basic.target   loaded active active Basic System
default.target loaded active active Default
paths.target   loaded active active Paths
sockets.target loaded active active Sockets
timers.target  loaded active active Timers

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

5 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

手动启动

$ systemctl --user start x0vncserver
$ systemctl --user status x0vncserver
● x0vncserver.service - VNC Duplicate Display RDP
   Loaded: loaded (/usr/lib/systemd/user/x0vncserver.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-08-07 18:27:00 IST; 5s ago
 Main PID: 2999 (x0vncserver)
   CGroup: /user.slice/user-1004.slice/[email protected]/x0vncserver.service
           └─2999 /opt/tigervnc/usr/bin/x0vncserver -passwordfile /etc/.vncpasswd -display :0

Aug 07 18:27:00 Machine systemd[930]: Started VNC Duplicate Display RDP.
Aug 07 18:27:00 Machine x0vncserver[2999]: Mon Aug  7 18:27:00 2017
Aug 07 18:27:00 Machine x0vncserver[2999]:  Geometry:    Desktop geometry is set to 1920x1080+0+0
Aug 07 18:27:00 Machine x0vncserver[2999]:  Main:        XTest extension present - version 2.2
Aug 07 18:27:00 Machine x0vncserver[2999]:  Main:        Listening on port 5900

参考

我环顾四周,发现用户有类似的问题,但建议的解决方案都没有解决我的问题

更新

这发生在特定用户身上。systemctl --user enable至少适用于同一设备上的另一个用户。

答案1

我遇到了同样的问题,为我解决的方法是使用它,如下所示:

#!/bin/bash
/usr/bin/x0vncserver -PasswordFile=/home/luserid/.vnc/passwd -display=:0

看来如果没有-display=:0.

答案2

要让 systemd 运行 VNC 服务器,该服务器需要两件事:

  1. $DISPLAY
  2. $XAUTHORITY

如果您在用户总线上运行(您就是这样),这些通常会自动设置。我发现,当这些变量被可靠地设置时,我不需要明确--display哪个是好的,因为它可以根据我的配置进行更改。 Tigervnc 可能有所不同,但我希望它$DISPLAY--display未指定的情况下使用。

那么,如何确保在启动服务时可靠地设置这些内容呢?

如果您的用户在 X 服务器完全启动并运行之前登录,这些可能不会立即设置。我发现这种情况发生在我使用 GDM 自动登录的系统上,或者如果我在通过显示管理器登录之前通过 SSH 或 TTY 登录的系统。

我在 Debian 系统上使用的解决方案是仅在保证 Xauthority 可用后才运行我的 vnc 服务器。我用一个单位检测到*.path

# ~/.config/systemd/user/vnc.path
[Path]
PathExists=%t/gdm/Xauthority

[Install]
WantedBy=default.target

# ~/.config/systemd/user/vnc.service
[Service]
ExecStart=x11vnc -shared -many -nopw

您只需要systemctl --user enable vnc.path为此工作即可。

路径单元将等待/run/user/1000/gdm/Xauthority存在。仅当您的用户有权访问显示后,该信息才会存在。创建后,路径单元将启动vnc.service,您的 VNC 服务器将启动$DISPLAY$XAUTHORITY自动设置变量。

该路径%t/gdm/Xauthority是 Debian 上的默认路径。 %t是缩写/run/user/1000,我喜欢使用该缩写,因为如果您的 UID 不是 1000,它就可以工作。如果您使用不同的发行版,请查看echo $XAUTHORITY是否需要不同的路径。


边注:

systemd设计有一些感兴趣的目标。 default.target意味着与桌面环境实现的graphical.target有某种关系的符号链接(例如)。graphical-session.targetgnome-session.target

理论上,使用WantedBy=graphical-session.targetandAfter=graphical-session.target是对我提到的更简单、更好的解决方案*.path,但不幸的是,实现需要由桌面环境完成,而这似乎还没有在所有桌面环境上发生。我发现graphical-session.target并非所有桌面环境都能可靠地提出该问题,因此*.path我建议使用该解决方案。

相关内容