$ DISPLAY 환경 변수는 무엇입니까?


74

쉘 스크립팅을 처음 사용합니다. $DISPLAY환경 변수가 무엇인지 이해하지 못합니다 .

우분투 13.10이 있고 /bin/bash쉘을 사용 합니다. 두 대의 모니터가 있습니다.

질문 :

  1. 명령 echo $DISPLAY:0.0내 컴퓨터 (두 모니터 모두)에 인쇄 됩니다. 이것은 무엇을 의미 하는가?

  2. 어떤 경우에 $DISPLAY변수가 비어 있거나 NULL입니까?

  3. 이것에 관한 기사 나 튜토리얼이 있습니까?


오늘 echo $DISPLAY:0NOT을 인쇄합니다:0.0
Chandrayya GK

공백이나 오류가 발생하면 도움이 될 것입니다 확인 : askubuntu.com/questions/432610/…
Maythux

답변:


86

X 윈도우 시스템에서 마법의 단어는 DISPLAY입니다. 디스플레이는 다음으로 구성됩니다 (간체).

  • 키보드,
  • 생쥐
  • 그리고 스크린.

디스플레이는 X 서버라고하는 서버 프로그램에 의해 관리됩니다. 서버는 연결된 다른 프로그램에 기능을 표시합니다.

원격 서버는 일반적으로 로컬 컴퓨터에있는 X 디스플레이 서버를 가리키는 DISPLAY 환경 변수의 정의를 통해 X 네트워크 트래픽을 리디렉션해야하는 위치를 알고 있습니다.

디스플레이 환경 변수의 값은 다음과 같습니다.

hostname:D.S

어디:

hostname은 X 서버가 실행되는 컴퓨터의 이름입니다. 생략 된 호스트 이름은 로컬 호스트를 의미합니다.

D는 시퀀스 번호입니다 (보통 0). 한 컴퓨터에 여러 대의 디스플레이가 연결되어있는 경우에는 달라질 수 있습니다.

S는 화면 번호입니다. 디스플레이는 실제로 여러 화면을 가질 수 있습니다. 일반적으로 0이 기본값이지만 화면은 하나만 있습니다.

값의 예

localhost:4
google.com:0
:0.0

hostname:D.S호스트 호스트 이름의 디스플레이 D에서 화면 S를 의미합니다. 이 디스플레이의 X 서버는 TCP 포트 6000 + D에서 수신 대기합니다.

host/unix:D.S호스트 호스트의 디스플레이 D상의 스크린 S를 의미하고; 이 디스플레이의 X 서버는 UNIX 도메인 소켓 /tmp/.X11-unix/XD에서 청취하고 있습니다 (따라서 호스트에서만 도달 할 수 있음).

:D.S host / unix : DS와 같습니다. 여기서 host는 로컬 호스트 이름입니다.

: 0.0은 로컬 호스트의 첫 번째 디스플레이에 연결된 첫 번째 화면에 대해 이야기하고 있음을 의미합니다.

자세한 내용은 여기여기참조하십시오 .

X (7) 매뉴얼 페이지에서 :

사용자 관점에서 모든 X 서버는 다음과 같은 형식의 표시 이름을 갖습니다.

호스트 이름 : displaynumber.screennumber

이 정보는 응용 프로그램에서 서버에 연결하는 방법과 기본적으로 사용해야하는 화면 (여러 모니터가있는 디스플레이)을 결정하는 데 사용됩니다.

hostname 호스트 이름은 디스플레이가 실제로 연결된 시스템의 이름을 지정합니다. 호스트 이름을 지정하지 않으면 동일한 시스템의 서버와 통신하는 가장 효율적인 방법이 사용됩니다. displaynumber "display"라는 문구는 일반적으로 공통 키보드 및 포인터 (마우스, 태블릿 등)를 공유하는 모니터 모음을 나타내는 데 사용됩니다. 대부분의 워크 스테이션에는 하나의 키보드 만있는 경향이 있으므로 하나의 디스플레이 만 있습니다. 그러나 대규모의 다중 사용자 시스템에는 여러 사람이 한 번에 그래픽 작업을 수행 할 수 있도록 여러 대의 디스플레이가있는 경우가 많습니다. 혼동을 피하기 위해 시스템의 각 디스플레이에는 해당 디스플레이의 X 서버가 시작될 때 디스플레이 번호 (0부터 시작)가 할당됩니다. 표시 번호는 항상 표시 이름으로 지정해야합니다. screennumber 일부 디스플레이는 두 개 이상의 모니터간에 단일 키보드와 포인터를 공유합니다. 각 모니터에는 자체 창 세트가 있으므로 해당 디스플레이의 X 서버가 시작될 때 각 화면에 화면 번호 (0부터 시작)가 지정됩니다. 스크린 번호를 지정하지 않으면 스크린 0이 사용됩니다.


이 $ DISPLAY가 널이거나 공백 일 때.
Chandrayya GK

정상 디스플레이에 문제가없는 한이 문제가 발생하지 않아야합니다. 대부분 디스플레이 관리자를 다시 시작하면 문제가 해결됩니다. 그러나 이것은 기본 동작이 아닙니다.
Maythux


@ChandrayyaGK 예를 들어, GNOME 또는 KDE와 같은 데스크탑 환경을 사용하지 않고 TTY (예 :)로 직접 로그인 /dev/tty1하면 공백이 표시 $DISPLAY됩니다.
Franklin Yu

@Maythux 때때로 0이되면 화면 번호가 생략 된 것 같습니다 . 내 그놈이 제공 :0합니다 $DISPLAY.
Franklin Yu

10

기존 답변은 더 넓은 그림을 다루지 못합니다.

그래픽 환경을 사용하지 않는 경우 (예 : Windows 등이없는 시스템 콘솔에 로그인하거나 SSH를 통해 텍스트 전용 터미널 또는 PuTTY를 실행하는 Windows 컴퓨터 등의 텍스트 전용 터미널에서 원격으로 로그인하는 경우) GUI는 포함되지 않으며 DISPLAY일반적으로 설정 해제됩니다. 컴퓨터와 통신하는 유일한 방법은 명령 줄입니다 (방법을 알고있는 경우 GUI 세션으로 피벗 할 수있는 방법이있을 수 있음).

그래픽 인터페이스 (우분투에서는 일반적으로 GDM greeter가 사용됨) 또는 그래픽 터미널 (eXceed 또는 mobaX를 실행하는 Windows 컴퓨터 또는 VNC 클라이언트와 같은 원격 데스크톱 소프트웨어)을 사용하여 콘솔에 로그인하는 경우 DISPLAY변수는 그래픽 세션을 관리하는 프로그램에 의해 설정되어 어떤 I / O 장치에 연결할지 그래픽 클라이언트에 표시합니다.

전통적으로 Ubuntu 컴퓨터의 GUI는 X11 구현 인 X.org를 실행하고 있었지만 최근에는 Mir라는 현대화 된 대체품이 Canonical에 의해 도입되었습니다. 더 최근에는 Mir가 Wayland라는 광범위하게 유사한 목표를 가진 다른 프로젝트에 찬성하여 버릴 것이라고 생각 합니다. 이 대체품은 우리가 여기서 다루지 않을 완전한 X11 스택의 복잡성을 줄이기 위해 만들어졌습니다. 그것들 DISPLAY은 우리가 여기서 논의 하는 것과 동일한 규칙 을 준수합니다 .

X11에서 호스트 부분은 DISPLAY원격 서버 일 수 있으며 Ubuntu 컴퓨터를 "그래픽 터미널"로 사용하여 해당 원격 서버의 파일과 프로그램에 액세스 할 수 있습니다 (이 경우 컴퓨터는 키보드를 제공하는 "서버"입니다) , 마우스 및 하나 이상의 디스플레이 장치가 원격 서버에서 실행되는 "클라이언트"프로그램에 연결됨). 보다 일반적으로 X11 (또는 Mir 또는 Wayland) 서버 및 클라이언트 프로그램 (데스크탑 관리자 및 웹 브라우저, 이메일 클라이언트, 캘린더 프로그램 등과 같은 다양한 그래픽 클라이언트)이 모두 컴퓨터에서 실행됩니다. 이는 DISPLAY값 의 "서버"부분으로 표시되며 후자의 경우 일반적으로 비어 있습니다 (기본값을 나타냄 localhost).

X11 서버는 하나 이상의 그래픽 세션을 실행할 수 있습니다 (예 : 콘솔 로그인과 원격 VNC 세션이 동시에 실행될 수 있음). 이 경우 (동일한 X11 서버 인스턴스에서 관리하는 경우) X11 용어로 둘 이상의 "디스플레이"가 있습니다. 실제로, 하나의 세션 (하나의 로그인 이벤트와 이로부터 생성 된 데스크탑 인스턴스)은 X11에서 하나의 디스플레이입니다.

하나의 이러한 디스플레이는 하나 이상의 화면을 가질 수 있습니다. 원래 아키텍처에는 한 화면에서 다른 화면으로 창을 이동하지 못하는 등의 불행한 특성이 있었지만 이는 전통적으로 하나의 모니터를 의미했습니다. Xinerama 및 Xrandr와 같은 애드온은 한 화면이 여러 모니터를 다양한 방식으로 연결하는 지점까지 상황을 더욱 악화 시켰습니다.

다중 모니터 시스템을 사용하는 경우 모니터를 다양한 방법으로 배열 할 수 있고 모니터에 일부가 표시되고 다른 부분이 모니터에 지정되지 않은 직사각형 영역으로 끝날 수 있습니다. 이것은 X11이 생성하는 "화면"이며, 하나 이상의 디스플레이 카드가있는 경우 각각 하나 이상의 모니터에 할당 된 이러한 화면을 여러 개 가질 수 있습니다 (또는 이론적으로 모니터없이 실행; Xvfb는이를 이용하여 모니터없이 X11을 실행하여 목적에 관계없이 GUI를 메모리 영역에 매핑하면됩니다.


Mir는 실제로 Unity와 함께 버려졌습니다. 오랫동안 gdm이 아닌 lightdm이 기본값이지만 Unity의 상승 이전과 마찬가지로 대답의 일부가 다시 정확 해졌습니다! 나는 MATE를 사용하므로 사소하게 확인할 수 없습니다 ...
Zanna

나는 콘솔 (창없이)에서 리눅스를 실행하고 있었고 모든 것을 설명합니다. 실제로 의미가 있습니다 : p
Jean-Francois T.

3

에서 https://help.ubuntu.com/community/EnvironmentVariables :

가변 디스플레이

값 예 :

:0.0
localhost:10.0
terminal01:0.0

그게 뭐야?

이 변수는 실제 그래픽 사용자 인터페이스를 표시 할 위치를 그래픽 응용 프로그램에 표시하는 데 사용되며 값은 3 가지 부분으로 구성됩니다. 호스트 이름 뒤에 콜론 (:), 표시 번호 뒤에 점 (.) 및 화면이 있습니다. 번호.

호스트 이름 부분을 사용하여 네트워크를 통해 그래픽 출력을 원격 시스템으로 전송할 수 있습니다. 로컬 시스템에서 실행중인 X 서버에 대한 출력을 의미하는 경우 생략 할 수 있습니다. 표시 번호를 사용하면 동일한 컴퓨터에서 실행되는 여러 X 서버 중에서 선택할 수 있습니다 (Ubuntu는 여러 X 서버를 사용하여 여러 그래픽 데스크탑 세션을 활성화합니다).

화면 번호는 동일한 X 서버가 관리하는 여러 개의 실제 화면 중에서 선택하는 데 사용되지만 요즘 "0"이외의 값으로 설정되는 경우는 거의 없습니다. "DISPLAY"환경 변수의 값을 수동으로 설정하는 것은 요즘 거의 필요하지 않습니다. 필요할 때 "GDM"및 "SSH"와 같은 많은 응용 프로그램에서 자동으로 지능적으로 조정할 수 있기 때문입니다.


3

echo $ DISPLAY는 내 컴퓨터에서 두 모니터 모두에서 : 0.0을 인쇄합니다. 이게 무슨 뜻이야?

: 0.0은 표시 번호 0과 화면 번호 0을 의미합니다.

어떤 경우에 $ DISPLAY는 공백이거나 NULL입니까?

$ DISPLAY에 오류가 있고 정상적으로 발생하지 않는 경우

이것에 관한 기사 나 튜토리얼이 있습니까?

일부 자습서 및 리소스는 여기에서 찾을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.