짧은 답변: XDG_RUNTIME_DIR 설정

짧은 답변: XDG_RUNTIME_DIR 설정

저는 직장에서 원격 직원이 SSH 및 VNC를 통해 Linux Mint를 실행할 수 있도록 합니다.

모든 직원은 우리가 활성화하려는 유일한 사운드 장치인 USB 헤드셋을 사용합니다. 비활성화해야 하는 사운드 장치는 "내장 오디오" 장치이며, 직원의 데스크톱에서 터미널을 열면 를 실행하여 장치가 비활성화되었는지 확인할 수 있습니다 pacmd list-sinks | grep "Built-in Audio".

이 명령은 직원의 사용자 이름과 비밀번호로 로그인하는 경우 SSH를 통해서도 작동하지만 관리자 "IT" 사용자 이름으로 SSH를 시도하면 오류가 발생합니다.PulseAudio 데몬이 실행되고 있지 않거나 세션 데몬으로 실행되고 있지 않습니다."도와주세요! 보안을 위해 각 직원에 대한 로컬 비밀번호가 없지만 IT 사용자 이름을 통해 SSH를 통해 권한을 사용하여 IT를 루트로 승격하더라도 내장 오디오가 활성화되어 있는지 확인할 수 없는 것 같습니다. su.

su - [employee]명령을 사용한 다음 로컬 디스플레이에 액세스하려고 시도했지만 export DISPLAY=:0사운드 장치도 확인할 수 없었습니다. :(

답변1

나는 그것을 생각했다! 그 aplay --list-devices명령이 내가 필요한 변수를 저장한 것으로 나타났습니다 . 이 명령을 실행하면 대상 시스템의 카드와 다음 중단에 대한 "하위 장치 1/1" 문자열이 제공됩니다. "하위 장치" 문자열은 장치가 켜져 있으면 0/1로 변경되고 장치가 꺼져 있으면 1/1로 변경됩니다.

거기에서 grep -A 1카드의 상태(이 경우 "시뮬레이션"이라고 함)를 구문 분석할 수 있도록 파이프한 다음 출력을 if/then 문으로 래핑하여 내장 오디오가 켜져 있는지 꺼져 있는지 확인합니다.

if aplay --list-devices|grep -A 1 Analog|grep Subdevices:\ 0/1;then echo Built-in IS ON;else echo off

답변2

짧은 답변: XDG_RUNTIME_DIR 설정

sudo su -l employee_login
export XDG_RUNTIME_DIR=/run/user/$(id -u)
pacmd list-sinks | grep "Built-in Audio" 

설명하다

비결은 PulseAudio가 다음을 찾는 것입니다.${XDG_RUNTIME_DIR}소켓의 경우 데몬과 통신해야 합니다. 하지만,XDG_RUNTIME_DIR사용자가 로그인할 때 PAM(Linux용 플러그인 가능 인증 모듈)에 의해 설정됩니다. sudo또는 를 사용할 때 suPAM을 건너뛰었으므로 변수가 설정되지 않았습니다.

1단계: 사용자 되기

sudo su -l employee_login

su명령은 귀하의 유효 UID(사용자 ID)를 귀하가 도와주려는 직원과 동일하게 설정합니다. PulseAudio는 이러한 사항에 대해 까다롭고 작동을 거부하기 때문에 이는 필요합니다.

이는 -l꼭 필요한 것은 아니지만 때로는 사용자 로그인 스크립트를 실행할 때 발생할 수 있는 문제를 디버깅하는 데 도움이 됩니다.

이미 루트 권한을 부여했다면 sudo이전에 이 작업을 수행할 필요가 없습니다.su -l employee_login

2단계: XDG_RUNTIME_DIR 설정

export XDG_RUNTIME_DIR=/run/user/$(id -u)

환경XDG_RUNTIME_DIR이는 사용자가 로그인할 때 PulseAudio 데몬이 시작된 소켓을 생성 pulse/native하고 pulse/cli이를 사용하여 클라이언트와 통신하기 때문에 필요합니다. [각주 1]

3단계: PulseAudio 사용

pacmd list-sinks | grep "Built-in Audio"

이것pacmd도구를 사용하면 실행 중인 PulseAudio 데몬을 검사(또는 재구성)할 수 있습니다. PulseAudio라는 용어를 생각할 수 있습니다.싱크대"연설자"를 의미하며원천"마이크"를 의미합니다.

list-sinks여기서는 사용 가능한 모든 출력 장치를 나열하는 PulseAudio 명령을 실행합니다 . grep원래 질문에서는 직원의 컴퓨터가 해당 기능을 비활성화하여 가능한 수신기로 사용할 수 없었기 때문에 우리는 "내장 오디오"가 있는지 확인 하곤 했습니다 .

참고 pacmd(그리고 그 사촌pactl)는 이보다 더 강력하며 문제를 진단하는 것뿐만 아니라 원격으로 문제를 해결하는 데에도 사용할 수 있습니다. 예를 들어, 오디오 출력은 정확하지만 기본적으로 잘못된 마이크가 선택된 경우 다음을 수행할 수 있습니다.

pactl set-default-source alsa_input.usb-USB_Camera_USB_Camera_SN0001-02.analog-mono 

팁: 옵션을 보는 데 두 번, 긴 소스/싱크 이름을 완성하는 데 한 번 사용할 수 있도록 bash-completion이 설치된 상태에서 사용하는 것이 가장 좋습니다 pacmd. 하지만 내장된 특수 명령줄은 사용되지 않으며 기록이나 완료가 없으므로 사용을 피하세요.pactlTABpacmdlibreadline

각주 1

기술적으로 PulseAudio 데몬은 항상 다음을 사용하지는 않습니다.XDG_RUNTIME_DIR. 예를 들어, 이 변수가 설정되지 않은 상태에서 데몬이 시작되면 /tmp 및 ~username/.config/pulse/의 심볼릭 링크를 사용합니다.오디오 장비-달리다. 마찬가지로 PulseAudio는 다른 사용자와 소켓을 공유하도록 구성할 수 있습니다.컨테이너 사이.

관련 정보