このシステムサービスがPortAudioがオーディオデバイスに照会するのを防ぐのはなぜですか?

このシステムサービスがPortAudioがオーディオデバイスに照会するのを防ぐのはなぜですか?

数時間、私は非常に奇妙な問題に直面しました。本当に二つのようです。本当に気にしないこと:システムサービス(何もしません!)と利用可能なオーディオデバイスのリスト。

/etc/systemd/system/myservice.serviceより正確には、起動時にできるだけ早く実行されるサービスがあります。

[Unit]
Description=Test
DefaultDependencies=false
[Service]
Type=simple
ExecStart=/usr/bin/python /root/foo.py
WorkingDirectory=/root/
[Install]
WantedBy=local-fs.target

foo.py以下を使用してオーディオデバイスに問い合わせます。sounddevicePythonモジュール(PortAudio用ラッパー):

import sounddevice
print(sounddevice.query_devices(0))

これは完全に機能し、1つのオーディオデバイスを返します。

ところで、2番目のサービスを追加すると /etc/systemd/system/[email protected]実際には何もしません(最初はUSBデバイスをマウントします)。このソリューションを使用しかし、デバッグのためにこの部分を削除しても問題はまだ存在します! ):

[Unit]
Description=Mount USB Drive on %i
[Service]
Type=simple
ExecStart=/usr/bin/ls         # note: normally here we should automount USB devices, but the bug is still there with just a simple ls that does nothing!

これは次のudevルールで始まります/etc/udev/rules.d/99-local.rules

KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/bin/systemctl start usb-mount@%k.service"

...次のようにオーディオデバイスのクエリが失敗します。

Dec 10 22:51:27 foo foo.sh[116]:   File "/usr/local/lib/python2.7/dist-packages/sounddevice.py", line 778, in __init__
Dec 10 22:51:27 foo foo.sh[116]:     extra_settings, samplerate)
Dec 10 22:51:27 foo foo.sh[116]:   File "/usr/local/lib/python2.7/dist-packages/sounddevice.py", line 2571, in _get_stream_parameters
Dec 10 22:51:27 foo foo.sh[116]:     info = query_devices(device)
Dec 10 22:51:27 foo foo.sh[116]:   File "/usr/local/lib/python2.7/dist-packages/sounddevice.py", line 569, in query_devices
Dec 10 22:51:27 foo foo.sh[116]:     raise PortAudioError('Error querying device {0}'.format(device))
Dec 10 22:51:27 foo foo.sh[116]: sounddevice.PortAudioError: Error querying device 0
Dec 10 22:51:27 foo systemd[1]: foo.service: Main process exited, code=exited, status=1/FAILURE
Dec 10 22:51:27 foo systemd[1]: foo.service: Failed with result 'exit-code'.

この問題をデバッグする方法は?PortAudioがオーディオデバイスに関する情報を照会できるという事実は、udev実際には何もしない2番目のSystemdサービス(で始まる)とまったく関係がないとは思いませんか?

私はまったく関係のない2つを結ぶ間違いについては全く知りません。


注:削除するとDefaultDependencies=false問題が解決するようです。しかし、DefaultDependencies=false始める前にネットワークが準備されるのを待つサービスは持続する必要があると思います。お持ちですか?このオプションがない他のソリューション

関連情報