WM_CLASS 대 WM_INSTANCE?

WM_CLASS 대 WM_INSTANCE?

실행하면 xprop두 개의 값이 있는 문자열과 같은 결과가 나타납니다. 하나는 i3이 an을 호출하고 instance다른 하나는 a를 호출합니다 class. 예를 들어 chromium-browser유틸리티 에서는 xprop다음과 같은 결과를 반환합니다.

WM_CLASS(STRING) = "chromium-browser", "Chromium-browser"

창과 이 두 필드에 대한 공식적인 지침은 무엇입니까? 이 점에서 그들은 매우 유사합니다. 그들은 다른가요? 그렇다면 무엇을 선택해야 하며 그 이유는 무엇입니까? GUI 작성자는 자신의 이름을 어떻게 분류하고 인스턴스화해야 합니까?

답변1

실제 행동은 다음과 같이 정의됩니다.사양의 제목은 다음과 같습니다.클라이언트 간 통신 규칙 매뉴얼(ICCM). 기본적으로 수업명은 신청하는 사람이 지정합니다. 인스턴스 이름은 사용자가 지정할 수 있으며, 인스턴스 이름으로 지정된 리소스는 클래스 이름으로 지정된 리소스를 재정의해야 합니다.

WM_CLASS이것이 X11r6용 ICCMv2가 말하는 내용 입니다.

WM_CLASS4.1.2.5.속성

WM_CLASS속성(제어 문자가 없는 STRING 유형)에는 두 개의 연속된 Null 종료 문자열이 포함되어 있습니다. 클라이언트와 창 관리자가 응용 프로그램 리소스를 찾거나 식별 정보로 사용하는 인스턴스 및 클래스 이름을 지정합니다. 이 속성은 창이 "접힌" 상태를 벗어날 때 존재해야 하며 창이 "접힌" 상태에 있는 동안에만 변경할 수 있습니다. 창 관리자는 시작 시와 창이 철회된 상태를 벗어날 때만 이 속성을 확인할 수 있지만 클라이언트는 해당 상태를 동적으로 변경할 필요가 없습니다.

두 문자열은 다음과 같습니다.

  • 이 창을 소유하는 애플리케이션의 특정 인스턴스를 명명하는 문자열입니다. 인스턴스 이름으로 지정된 리소스클래스 이름으로 지정된 모든 리소스를 재정의합니다. 인스턴스 이름은 사용자가 지정할 수 있습니다.운영 체제별 방식으로. POSIX 호환 시스템에서는 다음 규칙이 사용됩니다.

    • -name NAME명령줄에 제공된 경우 인스턴스 이름으로 사용됩니다 NAME.
    • 그렇지 않고 환경 변수가 설정되면 RESOURCE_NAME해당 값이 인스턴스 이름으로 사용됩니다.
    • 그렇지 않으면 프로그램을 호출하는 데 사용된 이름의 후행 부분( argv[0]디렉토리 이름 제외)이 인스턴스 이름으로 사용됩니다.
  • 이 창을 소유한 클라이언트가 속하는 응용 프로그램의 일반 범주를 지정하는 문자열입니다. 클래스별로 지정된 리소스는 동일한 클래스 이름을 가진 모든 애플리케이션에 적용됩니다.클래스 이름은 애플리케이션 작성자가 지정합니다.일반적으로 사용되는 클래스 이름의 예로는 "Emacs", "XTerm", "XClock", "XLoad" 등이 있습니다.

문자열은 null로 끝나므로 WM_CLASSnull로 구분된 속성의 일반적인 규칙과 다릅니다. STRING이러한 불일치는 이전 버전과의 호환성을 위해 필요합니다.

(굵은 글씨는 제가 추가한 것입니다)

관련 정보