![각 사용자가 사용할 수 있는 모든 $DISPLAY 변수를 캡처하는 방법](https://linux55.com/image/202938/%EA%B0%81%20%EC%82%AC%EC%9A%A9%EC%9E%90%EA%B0%80%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8A%94%20%EB%AA%A8%EB%93%A0%20%24DISPLAY%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%BA%A1%EC%B2%98%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
$DISPLAY
현재 사용자가 열려 있는 모든 변수를 가져오는 방법은 무엇입니까 ? 일반적으로 말하면 :0
새 디스플레이를 열면 다른 변수가 설정됩니다.
$DISPLAY
그렇다면 사용자가 사용할 수 있는 모든 변수를 어떻게 캡처합니까 ?
답변1
DISPLAY
GNU/Linux에서 모든 프로세스에 대한 환경 변수 값을 얻으려면 다음을 수행할 수 있습니다.
LC_ALL=C sed -zn 's/^DISPLAY=//p' /proc/*/environ |
LC_ALL=C sort -zu |
tr '\0' '\n'
sed
이 정보에 액세스하려면 as를 실행해야 합니다 root
. 일반 사용자로 실행하면 해당 사용자로 실행 중인 프로세스에 대한 정보만 얻을 수 있습니다.
환경 문자열로 전달된 명령은 그래픽 X11 데스크톱 세션의 일부로 시작되었거나 X11을 요청한 원격 클라이언트의 요청 으로 시작되었기 때문에 DISPLAY=some-display-spec
기본 X11 디스플레이 대상 환경에서 시작되었음을 의미합니다. 전송.some-display-spec
sshd
ssh
그러나 이는 명령을 실행하는 프로세스가 반드시 해당 서버에 연결하여 서비스를 요청(사용자와 상호 작용)한다는 것을 의미하지는 않습니다. 이는 아마도 다른 방식(예: 터미널 에뮬레이터의 중개를 통해)으로 사용자와 상호 작용하기 때문일 수 있습니다. ). 또는 오디오를 통해...) 또는 사용자와 전혀 상호 작용하지 않기 때문입니다. X11 서버에 연결할 수도 있지만 예를 들어 $DISPLAY
/ /... 옵션 중 일부를 사용하여 다른 서버에 연결하라는 지시를 받기 때문에 해당 변수를 무시합니다. 또한 이러한 옵션을 사용하면 프로세스가 환경에 변수를 추가하지 않고도 X 서버에 연결할 수 있습니다.-display
--display
-d
DISPLAY
Xorg
사용 가능한 X11 디스플레이가 로컬에서( ,, ... 등을 통해) 제공되는지 확인하려면 sshd
as 경로를 사용하여 Xvnc
스트림 유형 추상화 또는 unix 도메인 소켓을 볼 수 있습니다./tmp/.X11-unix/X<number>
LC_ALL=C grep -Po '^(\S+ ){3}0*10000 (?1){3}@?/tmp/.X11-unix/X\K\d+$' /proc/net/unix |
LC_ALL=C sort -u
tcp/localhost:0
또는 6000( 표시용)부터 X 서버를 찾을 것으로 예상되는 6000 이상의 합리적인 숫자까지의 TCP 포트에서 :
ss -nlt 'sport >= 6000 && sport < 6030'
어떤 경우든, 특정 사용자가 이러한 서버에 연결하여 디스플레이 서비스를 요청할 수 있는지 여부는 액세스 제어가 구성된 방식에 따라 달라지며, 이는 다양한 방법으로 수행될 수 있으며 서버마다 다를 수 있습니다.
특정 X11 디스플레이에 대한 라이센스 설정을 쿼리하려면 다음을 수행할 수 있습니다.
DISPLAY=that-display xhost
하지만 이 명령이 성공하려면 디스플레이에 액세스할 수 있는 권한이 있어야 하기 때문에 약간 까다롭습니다.
답변2
나는 당신의 "에 대답하고 있습니다$DISPLAY
사용자가 사용할 수 있는 모든 변수를 어떻게 캡처할 수 있나요 ?".
$DISPLAY
다른 곳에 표시되도록 클라이언트를 항상 설정할 필요는 없습니다 . 예를 들어,
xclock -display :2
또한 애플리케이션이 원격 디스플레이에 액세스할 수도 있습니다.
xclock -display 192.168.1.55:0
제가 1990년대에 X 디스플레이 서버에서 작업할 당시에는 디스플레이 서버에서 수천 마일/킬로미터 떨어진 시스템에서 클라이언트를 실행하는 것이 가능했습니다.
따라서 사용자가 사용할 수 있는 모든 디스플레이 서버를 나열하는 것은 불가능합니다.특정 적용 가능한 표준 세트가 없는 한.