![sudo:「指定されたプロトコルなし」を使用できますが、sudoを使用してcrontabでGUIアプリケーションを実行できないのはなぜですか? [コピー]](https://linux33.com/image/99735/sudo%EF%BC%9A%E3%80%8C%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%9F%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB%E3%81%AA%E3%81%97%E3%80%8D%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81sudo%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6crontab%E3%81%A7GUI%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
問題の原因となる可能性のある背景は次のとおりです。私は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
。