다시 시작한 후 왜 음악을 재생할 수 없나요?

다시 시작한 후 왜 음악을 재생할 수 없나요?

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

무엇이 잘못됐나요?

데비안의 기본 설정에 따르면 일반 사용자는 오디오 장치를 사용할 수 있는 권한이 있습니다.로컬로 로그인한 경우에만. crontab에서 실행되는 명령은 로그인 세션의 일부가 아니므로 cron 작업은 오디오 장치 사용 권한을 자동으로 얻지 않습니다.

@reboot이는 완전히 비대화형 플레이어 유틸리티를 사용하더라도 기본적으로 일반 사용자로 cron 작업을 실행하여 오디오를 재생할 수 없는 주된 이유입니다.

두 번째 이유는 대부분의 오디오 애플리케이션이 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을 사용하여 이 작업을 수행할 수 있으므로 이 작업을 수행하기 위해 루트의 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오디오 하위 시스템이 준비될 때까지 시작할 수 없습니다.

답변2

두 가지 질문이 있습니다. 우선 사용하면 안 된다.좋다, 로그에 다음과 같이 명확하게 표시되어 있습니다.

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.

이 문제를 해결하려면 파일(및 아직 존재하지 않는 경우 디렉터리)을 만듭니다.$HOME/.mplayer/config선으로

lirc=no

두 번째 문제는 그래픽 세션(X11, 아마도 여러분을 위한 것으로 추정되지만 저는 Wayland도 사용함)에 로그인하지 않은 경우 mplayer가 작동할 가능성이 없다는 것입니다. 프로그램을 초기화하지 않은 경우 어떻게 해야 합니까? 콘솔을 열까요? 그래픽 환경?

반면에, 시작할 때보다 (그래픽!) 로그인할 때 음악이 재생되기를 원하는 것이 더 합리적이라고 생각됩니다. 그래서 내 제안은 다음에서 자동 시작 스크립트를 생성하는 것입니다.$HOME/.config/자동 시작(내 KDE에 적용되며 DE에 따라 다를 수 있음), 내용

[Desktop Entry]
Type=Application
Name=mpl
Exec=bash -c 'sleep 3 && /usr/bin/mplayer  -noconsolecontrols "/home/mario/Videos/Two Steps From Hell - Heart of Courage.m4a" 2>/tmp/mplayer.reboot.log'
Terminal=false
Icon=mplayer
Comment=Just show indicator
Categories=Utility;Application;

위에서 주목할 점은 옵션입니다.-콘솔 컨트롤 없음,지금 바로실행하는 데 필요함플레이어백그라운드에서. 이것은 일반 Ubuntu 22.04 KDE 설치에서 잘 작동합니다.

.

관련 정보