나는 이것을 Raspberry Pi에 게시했지만 일반적으로 Linux나 프로그래밍에 더 적합하다는 말을 들었습니다. 그래서 지금 여기에 물어볼까 했는데...
비디오를 재생할 키오스크를 구성할 예정입니다. 저는 Raspberry Pi 데스크탑과 함께 NUC를 사용하고 있습니다. 모든 것이 잘 작동하지만 Cron을 사용하여 오디오를 자동화합니다. 학교에서 일하는데 낮에는 폭발음이 좀 심해서 시간대에 따라 바꿔줬으면 좋겠습니다.
다음 코드는 터미널에서 실행될 때 작동합니다.
/usr/bin/amixer set Master 16384
그리고
amixer sset 'Master' 16384
그래서 Cron에 넣었습니다.
15 09 * * * /usr/bin/amixer set Master 16384
그리고
43 09 * * * amixer sset 'Master' 16384
아무것도 없습니다. 아름다운. 그래서 실행할 매우 간단한 Python 스크립트를 만들었습니다. (예, 시스템 폴더에 넣었다가 옮기려고 했더니 그냥 거기에 있게 되었습니다.)
#!/usr/bin/env python3
from subprocess import call
call(["/usr/bin/amixer", "set", "Master", "65536"])
나는 그것을 실행 가능하게 만들었습니다.
chmod +x /etc/python/sound100.py
그런 다음 터미널에서 호출합니다.
/etc/python/sound100.py
그리고
/usr/bin/python3 /etc/python/sound100.py
다시 말하지만 작동합니다. 응. 크론에 들어갑니다. 어느 것도 아니다:
11 10 * * * python3 /etc/python/sound100.py
...도 아니다
11 10 * * * /usr/bin/python3 /etc/python/sound100.py
심지어
11 10 * * * /etc/python/sound100.py
아무것도 작동하지 않습니다.
따라서 실제 문제 해결이 시작됩니다. 시스템 로그를 확인합니다. 모든 것이 실행 중이지만 sudo
명령으로 실행 하면 sudoer로 실행할 때 최대 볼륨이 83이라는 것을 알게 되었습니다 . 즉, 에서 실행할 수는 없지만 sudo crontab -e
사용자의 cron에서 실행을 시작한다는 의미입니다.
아직 아무것도 없습니다. 그래서 sudoer로 실행해 보았지만 사전에 사용자와 함께 실행했습니다. 다시는 아무것도 없습니다.
도와주세요. SSH에 로그인할 필요 없이 볼륨이 자동으로 조정되어 로그아웃하거나 은퇴할 때까지 하루에 3번씩 배치한 각 NUC를 제공하기를 원합니다.
감사합니다!
답변1
온갖 도움을 받은 끝에 마침내 해결책을 찾았습니다. 이건 사실 제가 원했던 해결책도 아니고, 별로 깨끗하지도 않지만 효과가 있어서 여기에 게시합니다.
내가 이해하는 것
문제의 핵심은 내가 무엇을 하든 Amixer를 범용 사용자로 실행하면 Sudo 권한으로 승격되고 다른 사용자가 오디오 cronjob을 실행하도록 하는 것은 작동하지 않는다는 것입니다.
이로 인해 터미널을 통해 수동으로 전송된 모든 amixer 명령은 볼륨을 최대 65536으로 조정하고 Cron을 통해 전송된 모든 명령은 볼륨을 최대 88로 조정합니다. 이 큰 차이로 인해 내가 무엇을 하든 오디오가 효과적으로 음소거됩니다.
여기 두 사람의 많은 도움 덕분에 아마도 한 사람은 bash를 실행하려고 하고 다른 사람은 sh를 실행하고 있기 때문일 것이라는 결론에 도달했습니다. 하지만 둘 사이의 화해는 불가능해 보인다.
결국 포기하고 물리적 구성요소를 함께 실행하는 방식을 완전히 바꿨습니다...
그래서 이것이 내 해결책입니다.
HDMI-AGP 어댑터로 전환한 후 NUC의 간단한 3.5mm 남성-남성 오디오 잭을 TV에 연결했습니다. 제가 사용하고 있는 TV는 AGP의 비디오와 3.5mm의 오디오를 허용하므로 이제 비디오를 TV로 스트리밍할 수 있지만 Stereo Output
작동하려면 NUC에서 오디오로 전환해야 합니다.
그런 다음 정보를 amixer scontents
확인하기 위해 달려갔습니다 . 예상했던 대로 두 개의 개별 값이 표시되는데 지금은 이전에는 없던 255가 표시됩니다.sudo amixer scontents
Master
PCM
이를 염두에 두고 마스터에서 PCM으로 초점을 전환하고 다음과 같이 Crontab을 업데이트했습니다.
40 06 * * 1-5 amixer sset 'PCM' 191 2> /tmp/cronVolumeLog
25 07 * * 1-5 amixer sset 'PCM' 64 2> /tmp/cronVolumeLog
40 14 * * 1-5 amixer sset 'PCM' 128 2> /tmp/cronVolumeLog
오디오 잭을 사용할 때 약간의 딱딱거리는 소리와 기타 사소한 문제가 있기는 하지만 모든 것이 지금 예상한 대로 작동하지만 이를 처리해야 합니다.
나는 이것이 질문에 대한 가장 정직한 대답이 아니라는 것을 알고 있지만, 나를 기꺼이 도와주려는 사람들을 (말 그대로) 며칠 동안 검색하고 함께 일한 후에 내가 찾은 유일한 대답입니다.
언젠가 누군가가 이 글을 읽고 나보다 더 나아가 해결책을 찾기를 바랍니다. 아니면 빨리 포기하고 그들의 삶을 살아가며 멍청한 오디오 잭에 만족하세요.
하지만 많이 배웠기 때문에 그런 것입니다.
답변2
지금은 테스트할 곳이 없지만,자주cron
귀하가 설명하는 실패 유형의 이유는 다음과 같습니다.환경. printenv
명령줄에서 실행하고 해당 출력을 작업으로 실행한 결과와 비교해 보면 printenv
이를 쉽게 확인할 수 있습니다 . cron
예를 들어:
* * * * * /path/to/printenv > /home/pi/cron_env.txt 2>&1
두 출력 사이에 많은 차이점이 있음을 알 수 있습니다. 목록을 통해 선택하고 문제를 일으키는 환경 변수를 식별할 수 있습니다. RPi OS가 특정 오디오 및 블루투스 기능을 위해 특수 그룹을 생성한 것을 기억하지만 메모리에서 해당 그룹을 불러올 수는 없습니다.
bash
명령을 입력하는 쉘을 사용한다고 가정합니다.bash -l
, 더 간단한 접근 방식은 다음 명령을 호출하고 실행하는 것입니다 crontab
.
15 09 * * * bash -l /usr/bin/amixer set Master 16384
43 09 * * * bash -l /usr/bin/amixer sset 'Master' 16384
stderr
그리고 의견에서 제안한 대로 리디렉션을 사용하여 파일의 모든 출력을 캡처하는 것이 항상 좋은 생각입니다 amixer
.
15 09 * * * bash -l /usr/bin/amixer set Master 16384 2> /home/pi/cronErrorLog.txt
답변3
OP가 확장됨에 따라 cron을 통한 amixer 실행은 sudo 사용자로 수행됩니다. 내가 발견한 것은 "마스터 장치" 대신 AV 출력을 제어하는 "헤드폰" 또는 유사한 장치가 있다는 것입니다. 볼륨 레벨의 원래 값을 조작할 필요가 없습니다. 백분율을 사용하여 볼륨을 원하는 레벨로 설정하기만 하면 됩니다. 즉
15 09 * * * /usr/bin/amixer set Master 100\%
참고: 위의 예에서는 백분율 기호가 이스케이프되었습니다.
답변4
내 솔루션은
* * * * * export XDG_RUNTIME_DIR=/run/user/1000 && /usr/bin/amixer -D pulse sset Master 50\%
내 환경에는 XDG_RUNTIME_DIR이 필요한 것 같습니다.