일: openSUSE 머신에서 부팅 시 Chromium을 시작합니다.
질문:문제는 GUI 프로그램을 시작하고 싶은 것 같아요
지금까지:
Mon Aug 14; 06:45:00; marton;/etc/systemd ; $
Mon Aug 14; 06:45:00; marton;/etc/systemd ; $ ls -l
total 24
-rw-r--r-- 1 root root 529 Mar 15 07:20 bootchart.conf
-rw-rw-r-- 1 root root 138 Aug 14 06:34 chorm_start.service
-rw-r--r-- 1 root root 768 Mar 15 07:20 journald.conf
-rw-r--r-- 1 root root 709 Mar 15 07:20 logind.conf
drwxr-xr-x 1 root root 772 Aug 14 05:16 system
-rw-r--r-- 1 root root 1196 Mar 15 07:20 system.conf
drwxr-xr-x 1 root root 0 Mar 15 07:20 user
-rw-r--r-- 1 root root 992 Mar 15 07:20 user.conf
Mon Aug 14; 06:45:00; marton;/etc/systemd ; $ sudo chmod 664 chorm_start.service
root's password:
Mon Aug 14; 06:45:19; marton;/etc/systemd ; $ ls -l
total 24
-rw-r--r-- 1 root root 529 Mar 15 07:20 bootchart.conf
-rw-rw-r-- 1 root root 138 Aug 14 06:34 chorm_start.service
-rw-r--r-- 1 root root 768 Mar 15 07:20 journald.conf
-rw-r--r-- 1 root root 709 Mar 15 07:20 logind.conf
drwxr-xr-x 1 root root 772 Aug 14 05:16 system
-rw-r--r-- 1 root root 1196 Mar 15 07:20 system.conf
drwxr-xr-x 1 root root 0 Mar 15 07:20 user
-rw-r--r-- 1 root root 992 Mar 15 07:20 user.conf
Mon Aug 14; 06:45:20; marton;/etc/systemd ; $ cat chorm_start.service
[Unit]
Description="Starting chromium on startup"
[Service]
ExecStart=/usr/lib64/chromium/chromium
[Install]
WantedBy=multi-user.target
Mon Aug 14; 06:45:38; marton;/etc/systemd ; $ sudo systemctl status chorm_start
chorm_start.service - "Starting chromium on startup"
Loaded: loaded (/etc/systemd/chorm_start.service; enabled)
Active: failed (Result: exit-code) since Mon 2017-08-14 06:38:44 EEST; 7min ago
Process: 853 ExecStart=/usr/lib64/chromium/chromium (code=exited, status=1/FAILURE)
Main PID: 853 (code=exited, status=1/FAILURE)
Aug 14 06:38:47 date chromium[853]: Unable to init server: Could not connect: Connection refused
Aug 14 06:38:47 date chromium[853]: [853:853:0814/063844.727638:ERROR:browser_main_loop.cc(279)] Gtk: cannot open display:
Mon Aug 14; 06:46:35; marton;/etc/systemd ; $
질문: 내가 무엇을 잘못했고 어떻게 해결해야 할까요?
답변1
이제 systemd에 답이 있습니다.
systemd를 사용하여 이 작업을 수행하는 방법을 문의하셨기 때문입니다. ☺
이것이 시스템화된 사람들이 사람들에게 그렇게 하라고 말하는 방식입니다.
서비스 단위 파일을 정확히 잘못된 디렉토리에 넣었습니다. 들어가면 안 됩니다 /etc/systemd
. 들어가지도 말아야 합니다 /etc/systemd/system
. 그것은 들어가야 합니다 ~marton/.config/systemd/user
.
계정의 지원 하에 실행하려는 그래픽 프로그램이사용자당서비스는 아니다체계제공하다. (현재 수퍼유저로 WWW 브라우저를 호출하고 있습니다. 이는 매우 나쁜 생각입니다. 이 연습을 중지하십시오.지금! ) 너할 수 있다다음과 같이 구성하세요.모두디렉토리의 사용자 /etc/systemd/user
이지만 시스템의 모든 사용자가 Chromium을 서비스로 시작해야 하는 것은 아닙니다. 따라서 사용자 계정에 맞게 특별히 구성하십시오.
사용자별 서비스이므로 sans --user
옵션을 이용하여 운영하셔야 합니다. 예를 들어:systemctl
sudo
systemctl --사용자 상태 chrome.service
이는 활성화 및 비활성화에도 적용됩니다.
사용자별 서비스 단위로는 사용자별 서비스가 WantedBy=default.target
없기 때문에 이렇습니다 . multi-user.target
(그래야 한다고 생각하지만실제로사용 중인 데스크탑에 따라 다릅니다. 이 점에 대해 시스템화된 사람들이 말하는 것이 무엇인지는 명확하지 않습니다. )WantedBy=your-desktop-session.target
gnome-session.target
사람들이 사용자별 서비스를 로그인 세션별 서비스처럼 보이게 만들고 싶어하는 systemd의 한 부분은 graphical-session
서비스 단위가 설정과 병합되어야 하는 전체 메커니즘입니다.
[단위] PartOf=그래픽 session.target
그밖에 해야 할 일은 graphical-session
OpenSuSE가 2016년부터 추진하기 시작한 OpenSuSE의 발전 방향에 따라 다릅니다. Ubuntu와 Debian은 GUI 로그인 세션 시작 및 종료를 위한 복잡한 비하인드 셸 스크립트 세트를 제공하여 시작/중지 및 환경 변수 graphical-session.target
주입을 가능하게 합니다. DISPLAY
OpenSuSE에 아직 이 항목이 없으면 이 섹션을 작성해야 할 수도 있습니다.
추가 읽기
- Lennart Petlinget al. (2016). systemd.special. 시스템 매뉴얼 페이지. freedesktop.org.
- 마틴 피트(2016-07-25).단위: graphic-session.target 사용자 단위 추가. 시스템 오류 #3678.
- 마틴 피트(2016-09-29).그래픽 세션.대상. systemd.conf. 유튜브.
- 이안 레인(2017-07-30).그놈 사용자 세션에서 시스템화됨. GUADEC 2017. 유튜브.
답변2
간단히 말해서 (제외제이드 BP):
root
반드시 필요한 경우가 아니면 사용하지 마십시오.이는 브라우저의 경우 특히 그렇습니다. 브라우저의 대부분의 버그로 인해 공격자가 직접 루트 액세스 권한을 얻을 수 있기 때문입니다.시스템 파일을
~/.config/systemd/user
활성화됨: 예:
systemctl --user enable firefox
~/.config/systemd/user/firefox.service
:
[Unit]
Description=Start Firefox
PartOf=graphical-session.target
[Service]
ExecStart=/usr/bin/firefox
Type=oneshot
[Install]
WantedBy=graphical-session.target
시작 시 Firefox가 시작됩니다.
graphical-session.target
작동하지 않는 경우 (로그인 관리자, 디스플레이 관리자 또는 Google에서 다른 항목이 관리된다는 것을 알고 있기 때문에) systemctl --user status *.target
그 밖에 무엇이 있는지 확인하세요.
그래픽 로그인이 활성화되지 않은 경우 graphical-session.target
(이전 버전이거나안정적인시스템)에 다음을 추가하면 됩니다 ~/.xsessionrc
.
systemctl --no-block --user start graphical-session.target
답변3
제가 직접 시도해 본 결과, 여러분이 발견한 것처럼 systemd
그래픽 데스크톱 응용 프로그램을 시작할 때 사용하기에는 잘못된 도구입니다. 이를 수행하는 쉬운 방법은 선호하는 데스크탑 환경의 "애플리케이션 자동 실행" 기능을 사용하는 것입니다.
차이점은 환경 변수에 systemd
쉽게 액세스할 수 없는 DISPLAY
반면 "애플리케이션 자동 시작" 방법은 액세스할 수 있다는 점입니다.
답변4
이것은 나에게 효과적입니다. 핵심은 User
에 추가 Service
하고 DISPLAY
에서 시작하는 것 입니다 Environment
.
[Unit]
Description=launch chromium
[Service]
User=<user>
Environment=DISPLAY=:0
ExecStart=/usr/bin/chromium-browser
[Install]
[email protected]