ユニットファイル

ユニットファイル

ユニットファイルは手動で起動すると動作します。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サーバーを実行するには、サーバーに2つのものが必要です。

  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.serviceVNCサーバーが起動し、$DISPLAY自動的$XAUTHORITYに変数が設定されます。

これは%t/gdm/XauthorityDebianのデフォルトパスです。 UIDが1000以外の場合でも機能するため、私が使用したい%t略語です。/run/user/1000別のディストリビューションを使用している場合は、別echo $XAUTHORITYのパスが必要であることを確認してください。


注:

これsystemdデザイン興味のあるものがいくつかあります。 default.targetデスクトップ環境の実装とgraphical.targetいくつかの関係があるシンボリックリンクを意味します。graphical-session.targetgnome-session.target

理論的には、WantedBy=graphical-session.targetとの使用はAfter=graphical-session.target私が言及したよりも簡単でより良い解決策ですが、残念ながら、実装は*.pathデスクトップ環境で実行する必要があり、まだすべてのデスクトップ環境で発生しているようには見えません。graphical-session.targetすべてのデスクトップ環境でこの問題が確実に発生するわけではないことがわかったので、*.pathこのソリューションをお勧めします。

関連情報