아래와 같이 x0vncserver에 대한 systemd 장치를 만들었습니다.
[Unit]
Description=Remote desktop service (VNC)
After=graphical.target
[Service]
Type=forking
User=user
ExecStart=/usr/bin/sh -c '/usr/bin/x0vncserver -display :0 -rfbport 5900 -passwordfile /home/user/.vnc/passwd &'
[Install]
WantedBy=multi-user.target
실행했지만 실패했습니다. 그런 다음 x0vncserver를 사용하여 원래 데스크톱을 로드하려고 하면 데스크톱 자체가 완전히 로드된 후에만 로드할 수 있다는 것을 깨달았습니다. 그럼 데스크탑을 로딩한 후 실행되도록 시스템 장치를 설정해야 하는데 어떻게 해야 할까요? 아니면 설정할 수 있는 타이밍 방법이 있나요? 데스크톱 세션 도구를 사용하면 가능할 수도 있지만 시스템화된 방식의 솔루션이 있습니까?
내 default.target은
# systemctl 기본값 가져오기 그래픽 타겟
답변1
나는 일종의 추가 해결 방법이 포함되지 않은 답변이 부족한 것을 살펴본 후 직접 이 솔루션을 생각해냈습니다. 모든 솔루션이 유닛 파일에 포함된 후 확인했습니다.시스템 장치"After=" 아래의 man 파일은 현재 유닛을 시작하기 전에 특정 대상/서비스를 실행해야 합니다. "Requires="만 서비스와 해당 종속성을 동시에 시작합니다. 다음은 매뉴얼의 인용문입니다.
foo.service 장치에 Requires=로 구성된 bar.service 장치가 필요하고 After= 또는 Before=로 구성된 순서가 없는 경우 foo.service가 활성화되면 두 장치 사이에 지연 없이 동시에 시작됩니다.
따라서 x 서버와 x0vncserver가 동시에 시작되면 x0vncserver는 초기화된 x 서버에 연결할 수 없기 때문에 실패하게 됩니다. 이 작업을 수행하려면 "Requires=" 및 "After="에 내 DM을 구체적으로 추가해야 합니다. 이제 이 작업이 완료되었으므로 추가 마법 없이도 매번 작동합니다. "nodm.service" 항목을 사용 중인 특정 디스플레이 관리자로 바꿔야 합니다. 로그아웃하여 세션을 다시 시작하기로 결정한 경우에 "restart" 줄이 존재합니다. 이렇게 하면 X 서버가 종료되고 즉시 다시 시작됩니다(저는 nodm을 사용하고 있기 때문입니다). 확실하지는 않지만 표준 DM을 사용할 때도 적용된다고 생각합니다. x 서버가 로그인을 실행한 다음 성공적인 로그인 후 새 사용자의 x 세션으로 대체하여 종료하기 때문입니다. 이것의 유일한 부작용은 VNC 세션의 연결이 끊어지고 다시 시작해야 한다는 것입니다. 그러나 추가 마법 없이는 이 특정 문제에 대한 해결책이 없다고 생각합니다.
이 내 꺼야[이메일 보호됨]문서:
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target multi-user.target nodm.service
Requires=nodm.service
[Service]
Type=simple
ExecStart=/usr/bin/x0vncserver -display %i -rfbport 5900 -securitytypes none
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
참고로 "-securitytypes" 지시어를 좀 더 안전한 것으로 수정하는 것이 좋습니다. 왜냐하면 저는 이 지시어를 제가 유일한 사용자로 두고 어떤 보안 문제도 신경 쓰지 않는 로컬 네트워크에서만 사용하기 때문입니다.
답변2
첫 번째 제안은 나에게 적합하지 않습니다. 그래서 해결 방법을 시도했습니다. 다음과 같이 x0vncserver systemd 장치를 설정했습니다.
[Unit]
Description=Remote desktop service (VNC)
After=multi-user.target
[Service]
Type=forking
User=user
ExecStart=/bin/sh -c '/usr/bin/x0vncserver -display :0 -rfbport 5900 -passwordfile /home/user/.vnc/passwd &'
[Install]
WantedBy=default.target
그런 다음 위 서비스가 Desktop:0이 로드되기 전에 로드를 시도했지만 실패했기 때문에 내 컴퓨터의 데스크탑 로딩 시간(이전 구성이 좋지 않음)을 고려하여 정의된 시간 후에 x0vncserver.timer
실행 되도록 systemd 타이머 장치를 설정했습니다.x0vncserver.service
[Unit]
Description=x0vncserver timer
[Timer]
# Time to wait after booting before it run for first time
OnBootSec=2m
Unit=x0vncserver.service
[Install]
WantedBy=default.target
그런 다음 타이머 장치를 활성화 systemctl enable x0vncserver.timer
하고 다시 시작합니다. 이번에는 수동 개입 없이 서버를 시작하는 것이 목표였기 때문에 효과가 있었습니다 :).
답변3
이것은 이미 들어있습니다systemd 서비스 파일에 DISPLAY 설정.
그래도 작동하지 않으면 대부분의 데스크톱에서 제공되는 "자동 시작" 기능을 사용하는 것이 좋습니다. 그래도 실패하면 앱이 다시 시작되므로 사용하는 systemd
것이 더 선호되는 반면, 이 기능은 그렇지 않습니다.systemd
autostart
답변4
당신은 그것을 사용할 수 있습니다
Requires=xdg-desktop-autostart.target
이 일은 이후에 일어날 것입니다graphical.target