私はPythonスクリプトがバックグラウンドで実行され、mp3
キーボード入力を再生する非常に簡単なRaspberry Piプロジェクトを進めています。 SSHを介してデバイスに接続している間にスクリプトを手動で起動すると、すべてがうまく機能します。しかし、スクリプトを常に実行したいです。最初はに追加し、rc.local
crontabを介して実行するように切り替えました@reboot
。どちらの場合も、スクリプトは確かに実行中です。キーの押下が正常に認識されるたびにログが取得されるため、スクリプトが実行され音が鳴ります。しかし、何の音も出ませんでした。私はPythonplaysound
モジュールを使ってみて、mpg321
サブプロセスを実行してみました。手動で実行すると、両方の出力が鳴りますが、起動時には機能しません。
これは、起動時にUSBスピーカーを使用して自動的にスクリプトを実行した場合にのみ発生します。ログインした状態で手動で実行すると、スピーカーが機能します。起動時にスピーカーを3.5mmポートに接続した状態で動作しても動作します。 USBスピーカーから起動すると機能しません。
スクリプトの実行中に印刷して出力しますlsusb
。aplay -l
USBスピーカー(https://www.amazon.com/dp/B075M7FHM1)はスクリプトの実行時に存在する必要があります。
lsusb
結果(Jieliは確かにスピーカーです):
2023-09-17 19:37:45.976133: Bus 001 Device 005: ID 1c4f:0002 SiGma Micro Keyboard TRACER Gamma Ivory
Bus 001 Device 004: ID 4c4a:4155 Jieli Technology UACDemoV1.0
Bus 001 Device 003: ID 0424:ec00 Microchip Technology, Inc. (formerly SMSC) SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Microchip Technology, Inc. (formerly SMSC) SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
aplay -l
出力(カード1:UACDemoV10がスピーカーの場合):
card 0: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 1: UACDemoV10 [UACDemoV1.0], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: vc4hdmi [vc4-hdmi], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
すべてに絶対パスを使用し、スクリプトが確実に実行され、オーディオファイルを見つけることができます。実際に音が出ないということです。スクリプトが実行されると、USBスピーカーが認識されます。起動時にスクリプトを自動的に起動するより良い方法はありますか?rc.local
環境にcron
USBデバイスへの権限やアクセスが不足していますか?私の他の質問の1つについてのコメントは、「rc.localはrootによって実行されるため、ユーザーI / Oにアクセスできません」と述べましたが、ユーザーのcrontabにこの問題があるとは思いません。