[데비안/우분투] 서비스 데몬에서 X 윈도우 응용프로그램을 돌릴 때 Develop Tip

데비안과 우분투는 모두 거의 유사한 구조를 가집니다.

데몬 서비스를 하려면 

[Unit]
Description=Comvoy Service
After=multi-user.target
Conflicts=getty@tty1.service

[Service]
Type=simple
ExecStart=/opt/bin/myexe
StandardInput=tty-force

[Install]
WantedBy=multi-user.target



위와 같은 서비스를 이용할 my.service 파일을 만들어


/lib/systemd/system 에 넣어두고 


systemctl daemon-reload

systemctl enable my.service

systemctl start my.service


라고 주면 해당 서비스 프로그램이 데몬으로 돌게 됩니다.


그런데 데스크탑 리눅스가 돌고 있다 가정하고,

해당 데스크탑 사용자 (uid 1000 인 사용자)의 창으로

특정 X 응용 프로그램을 띄우게 하고 싶은 경우가 생겼습니다.


몇 가지 시행착오를 거친 이후, 다음과 같이 호출하면 되었습니다.


Python 프로그램 코드로 기술해 보았습니다.


user = pwd.getpwuid(1000).pw_name

cmd = f'sudo -u {user} -H XAUTHORITY=/home/{user}/.Xauthority ' \

           f'DISPLAY=:0 ' \

           f'/usr/bin/xclock ' \

           f'> /dev/null 2>/dev/null &'

os.system(cmd)


해당 사용자로 띄우기 위하여
sudo -u 사용자로 띄우는데 환경변수는 이어받고 -H,
XAUTHORITY 와 DISPLAY 환경변수를 지정한 다음,
해당 X 응용프로그램을 띄우면 서비스에서도 잘 떴습니다.


어느 분께는 도움이 되셨기를 ..





덧글

댓글 입력 영역

구글애드텍스트