alsa/timidity は、Debian 10 の init.d の root ユーザーとデフォルトのデバイスを認識しません。

alsa/timidity は、Debian 10 の init.d の root ユーザーとデフォルトのデバイスを認識しません。

Debian 10では、timidity通常のユーザーとしてalsaシリアルコンバータを起動しても問題はありません。完璧に動作します。

samuele@INSPIRON-17:~$ timidity -Os -iA
Requested buffer size 32768, fragment size 8192
ALSA pcm 'default' set buffer size 32768, period size 8192 bytes
TiMidity starting in ALSA server mode
Opening sequencer port: 128:0 128:1 128:2 128:3

ユーザーに切り替えるとroot動作しなくなります。

root@INSPIRON-17:~# timidity -Os -iA
ALSA lib pcm_dmix.c:1108:(snd_pcm_dmix_open) unable to open slave
Can't open pcm device 'default'.
Couldn't open ALSA pcm device (`s')

「基本」デバイスが見つからないようです。強制的に~/.asoundrcファイルを作成したり、グローバルに作成したりすることができますが、/etc/asound.conf一般ユーザーには必要ありません。 globalにアクセスしているようですが、そうではあり/usr/share/alsa/alsa.confませんroot

だから私の質問は:新しい設定ファイルを作成せずにこの問題をどのように解決できますか?グローバルファイルへのアクセス権を付与できますかroot?それとも何か抜けましたか?

システムはDebian 10を実行しています。

ベストアンサー1

解決したと思います。これはデザインとライセンスの問題が混在しています。

によると、/usr/share/alsa/alsa.confすべてのconfをロードします。に接続されている/etc/alsa/conf.dものが1つあります。最後のファイルでは、起動はデフォルトのalsaデバイスに設定されており、起動時に起動せず、ユーザーがログインしたときにのみ起動されます。99-pulse.conf/usr/share/alsa/pulse-alsa.confpulsepulseaudio

ルートは主にパルスへのアクセスが不足しているため、臆病者を使用することはできません。これが最初の権限の問題です。

ユーザーログイン後にtimidityをサービスとして起動しようとすると、パッケージによって提供されるinitスクリプトがtimidity-daemonstart-stop-daemonを介してユーザーtimidityでプロセスを開始しようとするため、機能しませんが、これは2番目の権限です。問題。そして、rootには権限がないので、ユーザーの変更部分を削除するためにスクリプトを変更しても機能しません。 (私にとって)唯一の謎は、timidity-daemonパッケージをインストールした後に権限の問題は発生しませんでしたが、最初の再起動後に動作が停止したことです。

とにかく2つの方法で解決できます。

シンプルで邪魔にならない最初のソリューションは、パッケージをまったく使用せずにtimidity-daemontimidity.service/usr/lib/systemd/user/

必須パッケージをインストールする前に

sudo apt-get install timidity fluid-soundfont-gm

/usr/lib/systemd/user/timidity.service次に、この内容でファイルを作成します(sudoを使用)。

[Unit]
Description=Timidity
After=pulseaudio.service

[Service]
Type=simple
ExecStart=/usr/bin/timidity -Os -iA

[Install]
WantedBy=pulseaudio.service

今インストールして実行してみてください

systemctl --user enable timidity.service
systemctl --user start timidity.service

すべてが完了しました。

2番目の解決策は、システム全体の起動時にパルスを開始し、ルートと心の弱い人がそれを使用できるようにすることです。これはセキュリティの観点から最善の選択ではありません。とにかく、システム全体のルートとして機能するようにパルス/シャイを取得するには、次の手順に従います。https://raven4.cz/wp/pulseaudio-in-system-wide-mode/)

まず、基本パッケージをインストールしてください。

sudo apt-get install timidity timidity-daemon fluid-soundfont-gm

編集(sudoを使用)/etc/pulse/daemon.conf、対応する行を検索する

; system-instance = no

コメントを外してyesに設定します。

system-instance = yes

これでファイルを削除/etc/pulse/system.paし、default.paをsystem.paにシンボリックリンクします。

sudo rm /etc/pulse/system.pa
sudo ln -s /etc/pulse/default.pa /etc/pulse/system.pa

それでは、編集(sudo)/etc/pulse/default.paしてその行を見つけてください。

load-module module-native-protocol-unix

そしてこのように変えてください。

load-module module-native-protocol-unix auth-group-enable=true auth-group=pulse-access socket=/tmp/pulse-socket

それでは、編集(sudo)/etc/pulse/client.confしてその行を見つけてください。

; default-server =

コメントを外してこのように設定してください。

default-server = unix:/tmp/pulse-socket

pulseaudioにアクセスしたいアカウントに各ユーザーを追加する必要がありますpulse-accesstimidity自分のユーザーとして実行されるので、それを追加する必要があります。私の場合は、ユーザーrootと基本ユーザーが欲しいので、samuele次のようにします。

usermod -a -G pulse-access root
usermod -a -G pulse-access samuele
usermod -a -G pulse-access timidity

これでカスタムファイルを作成する必要がありますpulseaudio.service。したがって、/etc/systemd/system/pulseaudio.serviceこの内容でファイルを作成してください。

[Unit]
Description=Pulseaudio

[Service]
User=root
Type=forking
ExecStart=/bin/pulseaudio --realtime --daemonize
Restart=always

[Install]
WantedBy=graphical.target

今、臆病さを正すべき時です。

使用していることを確認してください

aconnect -lo | grep -i timidity

そうでない場合は始めましょう。

sudo service timidity start

すべてが正常かどうか、生成されたサービスファイルがあることを再確認してください。/run/systemd/generator.late/timidity.service

にコピー/etc/systemd/system

sudo cp /run/systemd/generator.late/timidity.service /etc/systemd/system/timidity.service

これで編集(sudo)してファイルの検索を開始します。

After=remote-fs.target

そしてこのように変えてください。

After=remote-fs.target pulseaudio.service

ファイルの末尾に次の2行を追加してインストール可能にします。

[Install]
WantedBy=multi-user.target

今掃除する時間です。臆病者ではなくinit.dから削除してください。

sudo service timidity stop
sudo update-rc.d -f timidity remove

ユーザー固有のパルスオーディオを停止して無効にした後、ユーザーディレクトリ構成をクリーンアップします。

systemctl --user stop pulseaudio.socket
systemctl --user stop pulseaudio.service
systemctl --user disable pulseaudio.socket
systemctl --user disable pulseaudio.service
rm -Rf ~/.config/pulse/

今新しいサービスを有効にする

sudo systemctl enable /etc/systemd/system/pulseaudio.service
sudo systemctl enable /etc/systemd/system/timidity.service

機械を再起動してください。ああああああああああああああああああああああああ...それで終わりです!

おすすめ記事