sudo: "지정된 프로토콜 없음"을 사용할 수 있는데 sudo를 사용하여 crontab에서 GUI 애플리케이션을 실행할 수 없는 이유는 무엇입니까? [복사]

sudo: "지정된 프로토콜 없음"을 사용할 수 있는데 sudo를 사용하여 crontab에서 GUI 애플리케이션을 실행할 수 없는 이유는 무엇입니까? [복사]

문제의 원인일 수 있는 배경은 다음과 같습니다. 저는 Orange Pi Zero에서 Armbian Legacy Jessie를 실행하고 있습니다. 데스크탑은 포함되어 있지 않기 때문에 X, lightdm, Xfce를 설치했습니다. 부팅 시 X를 시작하지 못했기 때문에 crontab에 다음을 포함하는 스크립트를 실행하는 @reboot 줄이 있습니다.

#!/bin/bash
while ! ping -c 1 -W 1 192.168.1.100; do
    sleep 1
done
/usr/bin/startx

모든 것이 완벽하게 작동합니다(자동 로그인을 활성화하고 1:0에서 Mumble 클라이언트를 시작했습니다). 그런 다음 내 GPIO(말하기 버튼 누르기)를 모니터링하고 버튼을 누르면 "Ctrl+1"을 보내는 Python 스크립트가 있습니다. Mumble은 그룹의 말을 듣고 있으며 누르면 방송이 시작됩니다.

GPIO에 액세스하려면 루트로 Python 스크립트를 실행해야 하므로 /etc/profile루트가 X에 액세스할 수 있도록 다음 줄을 추가했습니다.

export DISPLAY=:1.0
export XAUTHORITY=/home/icuser/.Xauthority

내가 말했듯이 sudo로 실행하면 완벽하게 작동합니다.

sudo python /home/icuser/sendptt_zero.py

그러나 (crontab의 @reboot)를 사용하여 스크립트를 실행하면 다음과 같습니다.

sudo /usr/bin/python /home/icuser/sendptt_zero.py >> /home/hallgren/ic.log 2>&1 &

ic.log 파일에서 이 내용을 얻습니다(gpio 버튼을 누르면 Python에서 시뮬레이션된 키보드 키 기능이 시작됩니다(저는 다음을 사용하고 있습니다).http://www.autopy.org/)):

No protocol specified
Could not open main display

내 Python 스크립트에도 다음 줄이 있습니다(이 줄이 없으면 작동하지 않음).

os.environ['DISPLAY'] = ':1.0'

X를 자동으로 시작하는 방법과 sudo를 통해 명령줄에서는 작동하지만 crontab에서 시작하면 작동하지 않는 이유에 대한 아이디어가 있습니까?

답변1

크로나는 사용되지 않습니다 /etc/profile.

파일 맨 위에 변수를 씁니다 crontab.

관련 정보