유닛 파일

유닛 파일

유닛 파일은 수동으로 시작할 때 작동합니다. 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를 통해 로그인하는 경우 이러한 현상이 발생합니다.

데비안 시스템에서 제가 사용하는 솔루션은 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/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이 솔루션을 권장합니다.

관련 정보