再起動後、なぜ音楽を再生できないのですか?

再起動後、なぜ音楽を再生できないのですか?

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/pcmC0D3pHDMI 0に関連しているようです。オーディオ出力/dev/snd/pcmC1D0pHDMI 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オーディオサブシステムが準備されるまで起動できません。

おすすめ記事