OS
情報:
uname -a
Linux debian 5.10.0-18-amd64 #1 SMP Debian 5.10.140-1 (2022-09-02) x86_64 GNU/Linux
再起動時に音楽を再生したいです。
sudo crontab -e
@reboot /usr/bin/sleep 200;/usr/bin/mplayer /home/debian/welcome.mp3
音楽は再生されません。クローンログをチェックして、何が起こっているのかを確認してください。
sudo journalctl -u cron | grep -e "root" |grep -e mplayer -A 3
Oct 17 20:07:46 debian CRON[633]: (root) CMD (/usr/bin/sleep 200;/usr/bin/mplayer /home/debian/welcome.mp3)
Oct 17 20:11:07 debian CRON[593]: pam_unix(cron:session): session closed for user root
crontabのcmdは10月17日20:07:46から始まり、10月17日20:11:07にセッションを終了します。ほぼ200秒です!
import datetime
start = datetime.datetime(2022, 10, 17, 20, 7, 46)
end = datetime.datetime(2022, 10, 17, 20, 11, 7)
end-start
datetime.timedelta(seconds=201)
/usr/bin/sleep 200
実行されたが起動しなかったことを意味します/usr/bin/mplayer /home/debian/welcome.mp3
。なぜですか?
/usr/bin/sleep 200
クローンタブにはなく、/usr/bin/mplayer /home/debian/welcome.mp3
最後の7秒だけ残りました! 5分の長さの音楽です!
Oct 17 20:04:50 debian CRON[632]: (root) CMD (/usr/bin/mplayer /home/debian/welcome.mp3)
Oct 17 20:04:57 debian CRON[590]: pam_unix(cron:session): session closed for user root
一般ユーザー、同じログを使用してcronを生成するように更新されました。
Oct 17 21:37:26 debian CRON[638]: (debian) CMD (/usr/bin/sleep 200;/usr/bin/mplayer /home/debian/welcome.mp3)
Oct 17 21:40:48 debian CRON[593]: pam_unix(cron:session): session closed for user debian
同じ動作が最初から最後まで202秒、つまりほぼ200秒間続きました。 mplayerログに更新が追加されました。
Oct 17 22:25:11 debian CRON[646]: (debian) CMD (/usr/bin/sleep 200;/usr/bin/mplayer /home/debian/welcome.mp3 2>/tmp/mplayer.reboot.log)
Oct 17 22:28:33 debian CRON[593]: pam_unix(cron:session): session closed for user debian
cat /tmp/mplayer.reboot.log
do_connect: could not connect to socket
connect: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.
AO: [pulse] Init failed: Connection refused
Failed to initialize audio driver 'pulse'
[AO_ALSA] alsa-lib: pcm_hw.c:1715:(snd_pcm_hw_open) open '/dev/snd/pcmC0D0p' failed (-2): No such file or directory
[AO_ALSA] alsa-lib: pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open slave
[AO_ALSA] Playback open error: No such file or directory
Failed to initialize audio driver 'alsa'
[AO SDL] Unable to open audio: No available audio device
Failed to initialize audio driver 'sdl:aalib'
Could not open/initialize audio device -> no sound.
ファイルを確認してください:
file /home/debian/welcome.mp3
/home/debian/welcome.mp3: Audio file with ID3 version 2.4.0, contains:MPEG ADTS, layer III, v1, 64 kbps, 48 kHz, Stereo
再生ハードウェアデバイス:
aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Generic [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: Generic [HD-Audio Generic], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: Generic [HD-Audio Generic], device 8: HDMI 2 [HDMI 2]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: Generic_1 [HD-Audio Generic], device 0: ALC662 rev3 Analog [ALC662 rev3 Analog]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 2: Generic_1 [HD-Audio Generic], device 1: ALC662 rev3 Digital [ALC662 rev3 Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
ベストアンサー1
何が間違っていますか?
Debianのデフォルト設定によると、一般ユーザーはオーディオデバイスを使用する権限を持っています。ローカルでログインした場合のみ。 crontabで実行されるコマンドはログインセッションの一部ではないため、cronジョブはオーディオデバイスのアクセス許可を自動的に取得しません。
@reboot
これは、完全に非対話型のプレーヤーユーティリティを使用しても、デフォルトでは通常のユーザーとしてcronジョブを実行してオーディオを再生できない主な理由です。
2番目の理由は、ほとんどのオーディオアプリケーションがPulseAudioを使用するように構成されているためです。たとえば、オーディオの再生中にオーディオ出力をあるサウンドチップから別のサウンドチップに切り替えることができます。ただし、PulseAudioはユーザーセッションサービスです。ログインしている人がいないと実行されません。したがって、mplayer
通常のALSAに戻り、上記のように権限のない状況に直面します。
また、通常、PulseAudioは出力選択に使用されるため、この場合PulseAudioは関連付けられていないため、ALSA固有の方法で出力を指定する必要があります。
現在、mplayer
最初のALSAサウンドカードの最初の再生デバイス()をデフォルトで使用しようとしていますが、/dev/snd/pcmC0D0p
これはシステムには存在しないようです。実際の最初のALSA再生デバイスは/dev/snd/pcmC0D3p
HDMI 0に関連しているようです。オーディオ出力/dev/snd/pcmC1D0p
HDMI 0に接続されているモニターがない場合、またはオーディオ出力をサポートしていない場合は、デバイスを使用しようとします。すぐに失敗します。これは、ルートでオーディオを再生しようとしても失敗する理由を説明できます。
修正する方法
文書base-passwd
ファイルには/usr/share/doc/base-passwd/users-and-groups.txt.gz
次のように記載されています。
ボーカル
このグループは、ローカルでユーザーグループにオーディオデバイスへのアクセスを許可するために使用できます。
したがって、debian
ユーザーがオーディオデバイスを使用できるようにしたいのでいつでも、ローカルにログインしたときだけでなく、ユーザーをaudio
グループに追加する必要があります。
sudo usermod -a -G audio debian
これにより、通常のユーザーのcrontabを使用してこれを行うことができるので、これを実行するためにrootのcrontabを使用する必要はありません。 (何らかの理由で音楽をミュートする必要がある場合は、sudoを使用せずにログインしてからオーディオプレーヤーを直接終了することもできます!)
次に、crontabbedコマンドmplayer
にいくつかのオプションを追加する必要があります(実際に使用するにはビデオプレーヤーオーディオ再生):
@reboot /usr/bin/sleep 200;/usr/bin/mplayer -noconsolecontrols -ao alsa:device=hw=2.0 /home/debian/welcome.mp3
crontabを使用するには、次のように少し軽いオーディオプレーヤーを使用することをお勧めしますmpg321
。
@reboot usr/bin/sleep 200;/usr/bin/mpg321 -q -o alsa -a hw:2,0 /home/debian/welcome.mp3
その部分を削除するには、sleep 200
ソート依存関係を追加できますcron.service
。
sudo systemctl edit cron.service
...次の行を入力してファイルを保存します。
[Unit]
After=alsa-restore.service
/etc/systemd/system/cron.service.d/override.conf
これにより、入力した行を含むオーバーレイファイルが追加されます。この行は、(「ワンショット」サービス)が実行後にのみcrond
開始されることを保証しますalsa-restore.service
。つまり、すべてのサウンドドライバがロードされ、システムのデフォルトのオーディオミキサーレベルが設定されることを意味します。これで、crond
オーディオサブシステムが準備されるまで起動できません。