컴퓨터가 유휴 상태인지 확인한 다음 스크립트를 실행하려고 합니다.루트 사용자로x 시간 후.
마지막 사용자 입력이 발생한 이후의 시간을 측정하기 위해 xprintidle을 사용합니다. 문제는 동영상이나 음악이 재생 중일 때 xprintidle이 재설정되지 않는다는 것입니다.
그래서 현재 오디오 출력 레벨을 볼 수 있는 터미널 명령을 찾아봤습니다.
제가 테스트한 대부분의 명령은 실시간 오디오 출력 레벨이 아닌 현재 볼륨 백분율/값 설정만 표시합니다.
다음 명령을 사용하여 오디오를 출력하는 모든 애플리케이션 소스를 얻을 수 있었습니다.
pacmd list-sink-inputs | grep -c 'state: RUNNING'
그러나 루트로 실행하면 다음과 같은 오류 메시지가 나타납니다.
No PulseAudio daemon running, or not running as session daemon.
현재 라이브 오디오 출력 레벨을 확인하기 위해 어떤 명령/파일이 있는지 아는 사람이 있습니까?
아니면 그냥 확인해 보세요.아니요오디오 재생 중인가요?
답변1
pacmd
환경 변수를 사용하여 XDG_RUNTIME_DIR
실행 중인 PulseAudio 데몬의 경로를 찾으세요. 단, 사용자가 일치하지 않을 경우 접속이 거부됩니다. 이는 루트가 pacmd
일반 사용자의 PulseAudio와 통신하기 위해 직접 실행할 수 없음을 의미합니다.
루트로 실행되는 스크립트는 올바른 사용자로 사용되고 실행될 수 있지만 여전히 적절한 권한이 있습니다 sudo
( 예:pacmd
XDG_RUNTIME_DIR
이 답변). 스크립트는 여러 값을 알아야 합니다.
PulseAudio에 액세스할 수 있는 일반 사용자(예: pacmd list-sink-inputs
직장)로 호출됩니다.
id -u
echo "$XDG_RUNTIME_DIR"
1000
출력은 각각 및 입니다 /run/user/1000
. 그런 다음 스크립트에서 이 값을 사용하십시오. 다음과 같이 보일 것입니다:
sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 pacmd … | grep …
일반적으로 전달된 변수는 sudo VAR=value …
제한됩니다( 참고자료 참조 man 8 sudo
). sudo
루트로 실행하면 아무것도 변경되는지 잘 모르겠습니다 . 구성 에서 이 방법으로 설정하는 것을 sudo
허용하지 않으면 XDG_RUNTIME_DIR
셸을 사용하세요.
sudo -u '#1000' sh -c 'XDG_RUNTIME_DIR=/run/user/1000 pacmd …' | grep …