문제의 원인일 수 있는 배경은 다음과 같습니다. 저는 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
.