이제 systemd에 답이 있습니다.

이제 systemd에 답이 있습니다.

: 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옵션을 이용하여 운영하셔야 합니다. 예를 들어:systemctlsudo

systemctl --사용자 상태 chrome.service

이는 활성화 및 비활성화에도 적용됩니다.

사용자별 서비스 단위로는 사용자별 서비스가 WantedBy=default.target없기 때문에 이렇습니다 . multi-user.target(그래야 한다고 생각하지만실제로사용 중인 데스크탑에 따라 다릅니다. 이 점에 대해 시스템화된 사람들이 말하는 것이 무엇인지는 명확하지 않습니다. )WantedBy=your-desktop-session.targetgnome-session.target

사람들이 사용자별 서비스를 로그인 세션별 서비스처럼 보이게 만들고 싶어하는 systemd의 한 부분은 graphical-session서비스 단위가 설정과 병합되어야 하는 전체 메커니즘입니다.

[단위]
PartOf=그래픽 session.target

그밖에 해야 할 일은 graphical-sessionOpenSuSE가 2016년부터 추진하기 시작한 OpenSuSE의 발전 방향에 따라 다릅니다. Ubuntu와 Debian은 GUI 로그인 세션 시작 및 종료를 위한 복잡한 비하인드 셸 스크립트 세트를 제공하여 시작/중지 및 환경 변수 graphical-session.target주입을 가능하게 합니다. DISPLAYOpenSuSE에 아직 이 항목이 없으면 이 섹션을 작성해야 할 수도 있습니다.

추가 읽기

답변2

간단히 말해서 (제외제이드 BP):

  1. root반드시 필요한 경우가 아니면 사용하지 마십시오.이는 브라우저의 경우 특히 그렇습니다. 브라우저의 대부분의 버그로 인해 공격자가 직접 루트 액세스 권한을 얻을 수 있기 때문입니다.

  2. 시스템 파일을~/.config/systemd/user

  3. 활성화됨: 예: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]

관련 정보