Cronは両方のコマンドを完全に無視しますが、手動で完全に機能するスクリプトがあります(これは単なるスニペットです)。
sinkint=$(pacmd list-sinks | sed -n '/index\W [1-9]/p' | sed 's/.*://g;s/\W//g')
pacmd set-default sink $sinkint
pacmd set-sink-volume $sinkint 20%
予約されたこと
* * * * * /path/to/script arg1 >> /path/to/log
エラーメッセージ
No PulseAudio daemon running, or not running as session daemon.
No PulseAudio daemon running, or not running as session daemon.
You have to specify a sink name/index and a volume
編集する:
スクリプトで変数を試しました。
export PULSE_SERVER=unix:/tmp/pulse-socket
export PULSE_COOKIE=/tmp/pa_cookie
私の/etc/pulse/default.paのソケット
load-module module-native-protocol-unix socket=/tmp/pulse-socket
私の/etc/pulse/client.confのソケットとCookie
default-server = unix:/tmp/pulse-socket
cookie-file = /tmp/pa_cookie
クローンタップ-e
PULSE_SERVER=unix:/tmp/pulse-socket
PULSE_COOKIE=/tmp/pa_cookie
* * * * * /path/to/script arg1 2> /path/to/log
答え1
XDG_RUNTIME_DIR=/run/user/1000
crontabに追加すると動作します!
とても迷惑なことです。これは、文字通り私が必要とする唯一の環境変数だからです。まあ、将来的に誰かが答えが必要な場合 - これが答えだと思います。
答え2
ジョブがによって実行されているcron
か、systemd
起動スクリプトがデスクトップで実行されているのと同じランタイム環境で実行されていません。systemd
でスクリプトを起動しますroot
。変更やその他の環境変数の設定は、ジョブに自動的に伝播されPATH
ません。たとえば、noなので、GUIプログラムには特別な処理(読み取り)が必要です。~/.bashrc
cron
$DISPLAY
man xhost
cron
環境変数は、すべてのジョブの読み取りファイルで設定できます。crontab
man 5 crontab
echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
各環境の結果を確認してください。
その行はデフォルトで解釈されるため、構文はcommand
それよりも単純なので、環境を設定した後に必要なプログラムを呼び出すスクリプト(実行可能、インストール、開始)を呼び出すことをお勧めします。crontab
/bin/sh
/bin/bash
command
bash
#!/bin/bash