alsa/timidity는 Debian 10의 init.d에 있는 루트 사용자와 기본 장치를 인식하지 못합니다.

alsa/timidity는 Debian 10의 init.d에 있는 루트 사용자와 기본 장치를 인식하지 못합니다.

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가 하나 있습니다 . 마지막 파일에서는 시작이 기본 alsa 장치로 설정되어 있으며 부팅 시 시작되지 않고 사용자가 로그인할 때만 시작됩니다.99-pulse.conf/usr/share/alsa/pulse-alsa.confpulsepulseaudio

루트는 주로 펄스에 대한 액세스 권한이 부족하기 때문에 겁쟁이를 사용할 수 없습니다. 이것이 첫 번째 권한 문제입니다.

사용자 로그인 후 timidity를 서비스로 시작하려고 하면 패키지에서 제공하는 init 스크립트가 timidity-daemonstart-stop-daemon을 통해 사용자 timidity로 프로세스를 시작하려고 시도하기 때문에 작동하지 않지만 이 동작은 두 번째 권한입니다. 문제. 그리고 루트에는 권한이 없기 때문에 사용자 변경 부분을 제거하기 위해 스크립트를 변경해도 작동하지 않습니다. (저에게 있어서) 유일한 미스터리는 timidity-daemon 패키지를 설치한 후 권한 문제가 발생하지 않았지만 첫 번째 재부팅 후에 작동이 멈췄다는 것입니다.

어쨌든 두 가지 방법으로 해결할 수 있습니다.

간단 하고 방해가 덜한 첫 번째 솔루션은 패키지를 전혀 사용하지 않고 timidity-daemon.timidity.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

모든 것이 완료되었습니다.

두 번째 해결책은 시스템 전반에 걸쳐 부팅 시 펄스를 시작하고 루트와 마음이 약한 사람이 이를 사용할 수 있도록 허용하는 것인데, 이는 보안 관점에서 볼 때 최선의 선택이 아닙니다. 어쨌든 시스템 전반에 걸쳐 루트로 작동하도록 펄스/수줍음을 얻으려면 다음 단계를 따르십시오.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-access. timidity자신의 사용자로 실행되므로 이를 추가해야 합니다. 내 경우에는 사용자 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

파일 끝에 다음 두 줄을 추가하여 설치 가능하게 만드세요.

[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

기계를 다시 시작하세요아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아... 그러면 끝입니다!

관련 정보