실행중인 창 관리자를 확인하는 방법


179

현재 세션에서 현재 실행중인 창 관리자 를 결정하는 방법 (예 : 명령 또는 환경 변수)이 있습니까?

답변:


145

wmctrl설치 한 경우 명령의 첫 번째 출력 라인

    wmctrl -m

창 관리자 이름이 표시됩니다. wmctrl설치 하지 않은 경우 다음 명령을 사용하여 설치하십시오.

    sudo apt-get install wmctrl

참고로, man wmctrl즉의 man페이지 는 다음과 같이 wmctrl말합니다.

-m 창 관리자에 대한 정보를 표시합니다 ...

내 우분투 11.10에 / 리눅스 3.0.0-14-일반적인 # 23 - 우분투 x86_64의 / metacity 2.34.1 시스템에서 출력의 첫 번째 줄 wmctrl -m이었다 Name: Metacity
동안이 echo $DESKTOP_SESSION보였다 ubuntu-2decho $XDG_CURRENT_DESKTOP보였다 Unity.

신선한 우분투 15.10에의 설치 Ubuntu desktop에서, 오래된 노트북에 소프트웨어 출력의 첫 번째 줄을 wmctrl -m이었다 Name: Compiz
그동안 DESKTOP_SESSIONXDG_CURRENT_DESKTOP값을했다 ubuntuUnity


4
불행히도 X11이 활성화되어 있어도 ssh에서는 작동하지 않습니다.
Sridhar Sarnobat

1
ubuntu 15.04의 @ Sridhar-Sarnobat에서 running ssh -Y {host} 'wmctrl -m'은 일부 값 (예 : "Name : Compiz"및 여러 N / A)을 반환하지만 ssh창 관리자에 대한 정보는 제한적입니다.
마이클

시나몬을 실행하는 데비안에서는 작동하지 않습니다. wmctrl -m의 출력은 Name : Mutter (Muffin)이고 $ XDG_CURRENT_DESKTOP = X-Cinnamon
Floyd

Xubuntu Wily에서 Window Maker 0.95.6을 실행하면 모든 항목에 대해 N / A가보고됩니다. GDMSESSION은 wmaker-common으로 설정되었지만 XDG_CURRENT_DESKTOP은 전혀 설정되지 않았습니다.
Mei

@Mei, 비교할 수있는 다른 시스템에서 Window Maker를 실행하고 있습니까? 또한 wmctrl -d창 관리자 wmctrl -l로 Xubuntu Wily에서 (창 관리자가 관리하는 모든 데스크톱 나열) 또는 ( 창 관리자 가 관리하는 창 나열 ) 중 하나가 제대로 작동합니까?
James Waldby-jwpat7

101

리눅스 시스템에 나는 환경 변수를 테스트 XDG_CURRENT_DESKTOP하고 GDMSESSION다음과 같은 결과를 얻었다.

이 줄을 사용하여 출력을 얻을 수 있습니다.

printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"

우분투 18.04 (우분투)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu

우분투 18.04 (웨이 랜드의 우분투)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu-wayland

우분투 16.04


화합 (7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

우분투 14.04


미르와 함께하는 유니티

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

MIR_SERVER_NAME도 설정되어 있습니다

  • MIR_SERVER_NAME=session-$NUMBER

Mir없이 실행되는 Unity

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

XFCE

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xfce

우분투 12.04


KDE

  • XDG_CURRENT_DESKTOP=
  • GDMSESSION=kde-plasma

유니티 3D

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

유니티 2D

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu-2d

금언

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-shell

그놈 클래식

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-classic

그놈 클래식 (효과 없음)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-fallback

다른 우분투 기반 배포판


민트 13 (시나몬)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=cinnamon

민트 16 (KDE 에디션)

  • XDG_CURRENT_DESKTOP=KDE
  • GDMSESSION=default

민트 17 (시나몬)

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=default

루 분투 12.04

  • XDG_CURRENT_DESKTOP=LXDE
  • GDMSESSION=Lubuntu

Wasta 14.04 / 18.04

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=cinnamon

Gnome 데스크탑을 사용하는 Wasta 14.04.

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome

우분투 메이트 18.04

  • XDG_CURRENT_DESKTOP=MATE
  • GDMSESSION=mate

수운 투 18.04

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xubuntu

4
민트 13 (시나몬) : XDG_CURRENT_DESKTOP = 그놈, GDMSESSION = 시나몬
rik-shaw

1
루 분투 12.04 : XDG_CURRENT_DESKTOP = LXDE, GDMSESSION = 루 분투
rik-shaw

$ DESKTOP_SESSION은 어떻습니까? 백업 솔루션으로 :)
Savvas Radevic

1
GDM을 사용하지 않으면 어떻게 되나요?
Robert Siemer

6
또한 어떤 창 관리자를 사용 하는지 대답하지 않습니다 !
Robert Siemer

42

터미널 유형 env에서 모든 환경 변수를 봅니다. 그들 중 일부는 다음과 같습니다.

XDG_CURRENT_DESKTOP- 사용중인 데스크탑 환경을 알려줍니다

GDMSESSION- 로그인 할 lightdm greeter에서 선택한 옵션을 알려줍니다.

그것들을 사용하려면 터미널로 이동하여 다음을 입력하십시오.

echo $XDG_CURRENT_DESKTOP

(Unity를 사용하는 경우 'unity'와 같은 출력)

또는

echo $GDMSESSION  

(로그인에서 우분투를 선택한 경우 'ubuntu'또는 로그인에서 해당 항목을 선택한 경우 'ubuntu-2d'와 같은 출력이 표시됩니다.)

DESKTOP_SESSIONCOMPIZ_CONFIG_PROFILEenv같은 출력을 자세히 보면 다른 사람들이 있습니다.

당신이 찾고있는 것은 사용중인 창 관리자의 이름이므로, 이것을 얻는 방법을 보는 유일한 방법은 프로세스 목록을 보는 것입니다. 이를 위해 pgrep( Wikipedia ) 라는 명령이 있습니다 . 매개 변수 -l이 프로세스 ID를 추가하기 때문에 이름을 얻기 위해 다음을 수행했습니다.

pgrep -l compiz |cut -d " " -f2프로세스가 동일한 사용자에 의해 실행되므로 sudo 부분을 접두사로 사용할 필요가 없습니다. 그런 다음이를 사용하여 창 관리자를 기반으로 작업을 수행하는 스크립트를 만들 수 있습니다.

그냥 단어를 변경, 다른 유형을 확인합니다 compiz다른 등으로 mutter, kwin, 등


2
세션 이름과 데스크톱 환경을 알려줍니다. 예를 들어 Metacity, Mutter, Compiz 또는 기타 창 관리자를 사용할 수있는 데스크탑 환경 인 "GNOME"이라고 표시되어 있습니다. 세션 이름 인 "gnome-classic"이라고 표시되며 해당 이름의 창 관리자는 없습니다.
Anonymous

1
당신은 간다. 프로세스 목록에 도움이되는 명령을 찾았습니다. pgrep. 해당 부분으로 이동하면 최소한 창 관리자 이름이 표시됩니다. 내가 모두 함께 추가 할 수 있는지 확인하려고합니다. Ubuntu 11.10이 Compiz (Gnome 3.x 인 경우 mutter)를 사용하여 약간 혼동하기 때문에 귀하의 질문은 매우 좋습니다. 따라서 Unity에서 사용되는 실제 창 관리자를 지적하는 것이 좋습니다.
Luis Alvarado

$XDG_CURRENT_DESKTOP창 관리자가 아닌 현재 데스크탑 환경입니다.
Ken Sharp

24

내가 발견 pstree큰 도움이 될 수 있습니다.

설치

sudo apt-get install pstree

산출

이것이 내가 얻은 것입니다.

 ├─lightdm─┬─Xorg───2*[{Xorg}]
 │         ├─lightdm─┬─gnome-session─┬─bluetooth-apple───2*[{bluetooth-apple}]
 │         │         │               ├─compiz─┬─sh───gtk-window-deco───2*[{gtk-window-deco}]
 │         │         │               │        └─5*[{compiz}]
 │         │         │               ├─deja-dup-monito───2*[{deja-dup-monito}]
 │         │         │               ├─gnome-fallback-───2*[{gnome-fallback-}]
 │         │         │               ├─gnome-screensav───2*[{gnome-screensav}]
 │         │         │               ├─gnome-settings-───2*[{gnome-settings-}]
 │         │         │               ├─nautilus───2*[{nautilus}]
 │         │         │               ├─nm-applet───2*[{nm-applet}]
 │         │         │               ├─polkit-gnome-au───2*[{polkit-gnome-au}]
 │         │         │               ├─ssh-agent
 │         │         │               ├─telepathy-indic───2*[{telepathy-indic}]
 │         │         │               ├─update-notifier───2*[{update-notifier}]
 │         │         │               ├─vino-server───2*[{vino-server}]
 │         │         │               ├─zeitgeist-datah───{zeitgeist-datah}
 │         │         │               └─3*[{gnome-session}]
 │         │         └─{lightdm}
 │         └─2*[{lightdm}]

1
이것은 내 사용자 정의 buildroot 시스템으로 나를 데려갔습니다.
jc__

11
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t 

1
이것이 어떻게 작동하는지 설명 할 수 있습니까? 또한, 당신 )은 마지막에 누락 된 것 같아요 .
Louis Matthijssen

@LouisMatthijssen 1. xprop -root -notype모든 루트 창의 속성을 표시하고 (더 쉽게 구문 분석하기 위해 유형을 생략) 출력은 awk파이프 를 통해 전송됩니다 . 2. awk명령 $1=="_NET[blah]CK:"{print $5}'은 파이프를 통해 얻은 입력의 각 행의 첫 번째 열을 주어진 문자열과 비교하고 일치하는 것을 찾으면 대괄호로 코드를 실행 하여이 행의 다섯 번째 열을 인쇄합니다-우연히도 우연히 발생합니다. 나는 "_NET_SUPPORTING_WM_CHECK"아톰의 ID가 될 것이다. 3.이 ID는 다음과 윈도우 관리자의 속성을 얻기 위해 다시 사용됩니다xprop -id
cprn

4

나는 또한 KDE로 테스트 해 왔으며 결론은 다음과 같습니다.

a) HardInfo를 사용한 그래픽 방식 : 대답은 일반적으로 "운영 체제"> "데스크탑 환경"에 있지만 그렇지 않은 경우 "환경 변수"를 볼 수 있습니다. HardInfo는 KDE가있는 배포판을 제외한 모든 테스트 된 배포판을 사용할 수 있지만 쉽고 빠르게 설치할 수 있습니다 (Linux Mint 13에 2 개의 패키지 만).

b)이 명령이있는 명령 행 : ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm". 더 많은 행에 나타나는 항목이 답이되어야합니다 (추첨이있는 경우 "세션"이있는 항목이 해결 책임).


XFCE는 또한 여러 가지 gnome-...프로세스를 가지고 있습니다 (와 kde 적중 kdevtmpfs)
Xen2050

2

위의 어느 것도 실제로 저에게 효과가 없었습니다 .Gnome을 현재 데스크탑 세션으로 실행하고 있는지 여부를 알고 싶었습니다.

이것이 효과가 있습니다. 터미널을여십시오.

lsb_release -a

(UBUNTU 머신에 어떤 풍미 또는 버전을 설치했는지 확인)

ls /usr/bin/*session

(현재 사용중인 데스크탑 세션 / 데스크톱 환경을 시작합니다)

gnome-shell --version 

(어느 버전의 그놈이 설치되어 있는지 확인)


1
#! /bin/bash
#  (GPL3+) Alberto Salvia Novella (es20490446e.wordpress.com)


windowManagerName () {
    window=$(xprop -root -notype)
    identifier=$(echo "${window}" | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}')
    attributes=$(xprop -id "${identifier}" -notype -f _NET_WM_NAME 8t)

    echo "${attributes}" |
        grep "_NET_WM_NAME = " |
        cut --delimiter=' ' --fields=3 |
        cut --delimiter='"' --fields=2
}


windowManagerName

또는 한 줄로 :

id = $ (xprop -root -notype | awk '$ 1 == "_ NET_SUPPORTING_WM_CHECK :"{print $ 5}'); xprop -id "$ {id}"-notype -f _NET_WM_NAME 8t | grep "_NET_WM_NAME ="| cut --delimiter = ''--fields = 3 | cut --delimiter = ' "'-필드 = 2


0

이것은 dbus와 계정 서비스 (우분투에서 기본적으로)로 가능합니다.

$ qdbus --system org.freedesktop.Accounts \                                                                
> /org/freedesktop/Accounts/User1000 \                                                                                     
> org.freedesktop.Accounts.User.XSession                                                                                   
ubuntu

lightdm (그래픽 로그인 화면)을 통해 로그인하여 이것을 테스트했다는 사실에 주목할 필요가 있습니다. 블랙 박스와 같은 고전적인 데스크탑을 감지했으며 분명히 Unity를 감지했습니다. 나는 이것이 사용자가 로그인 화면에서 세션으로 선택한 값이라고 생각합니다. 그래서 프로세스 검사를 사용하는 것이 조금 더 쉽습니다.


0

스크립트

다음 스크립트 는 unix.se에 게시 한 비슷한 질문에 대한 최상의 답변 이었습니다 . 또한 Unity 및 LXDE 와도 잘 작동합니다.

if [ "$XDG_CURRENT_DESKTOP" = '' ]
then
  desktop=$(echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/')
else
  desktop=$XDG_CURRENT_DESKTOP
fi

desktop=${desktop,,}  # convert to lower case
echo "$desktop"

0

라는 도구를 사용할 수 있습니다 inxi. Ubuntu Repositories에서 다음을 통해 얻을 수 있습니다.

sudo apt install inxi

또는 github에서 : https://github.com/smxi/inxi

다음과 같이 명령을 실행하십시오.

inxi -Sx
System:    Host: blackhole Kernel: 5.1.15-050115-lowlatency x86_64 bits: 64 compiler: gcc v: 8.3.0
           Desktop: i3 4.16.1-178-g31c0f1b8 Distro: Ubuntu 19.04 (Disco Dingo)

Desktop: i3부분을 주목하십시오 . 필자의 경우 사용하는 창 관리자는 i3입니다.

옵션은 -S시스템 정보를 표시 x하고 창 관리자에 대한 정보를 추가합니다.


-3

실행중인 프로세스에서 알려진 창 관리자를 확인하는 것만 생각할 수 있습니다. gconf에는 선호하는 창 관리자로 설정된 키가 있었지만 Gnome 2.12 이후에는 더 이상 사용되지 않습니다.

만약 이것이 프로그래밍 목적이라면 모든 리눅스 창 관리자를 연구하는 것이 좋습니다. 인기있는 몇 가지는 :

  • 그놈 껍질 *
  • compiz
  • 메타 시티
  • 속삭임
  • 톱상어

명령을 사용하여 각각에 대해 점검을 수행해야합니다 pgrep -l $WINDOW_MANAGER. 여기서 $WINDOW_MANAGER점검하려는 창 관리자의 이름입니다. 이 pgrep명령은 실행중인 프로세스를 확인합니다.

Gnome Shell이 ​​창 관리자로 간주되는지 100 % 확실하지 않습니다. /usr/bin/gnome-wm스크립트 의 목록에서 얻은 나머지 창 관리자 이 스크립트는 실제로 사용 가능해야합니다 (새로 설치 한 상태이므로). 제 경우에는 compiz기본 창 관리자가 아닌 (Gnome 세션이 아닌) 실행하려고합니다 .

편집하다:

@Anarci의 의견은 더 정확한 것 같습니다. 내 경우에는 그것을 보여 주었다 gnome-shell.


1
pgrep은 정규식을 지원하므로 교대로 패턴을 사용할 수 있습니다. pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
Anonymous

1
충분하지 않습니다. 사용자가 다른 관리자와 여러 X 세션을 실행하는 경우 어떻게됩니까? 최소한 관심있는 디스플레이에서 창 관리자가 작동하는지 확인해야합니다 ( $DISPLAY환경에서 검사 하여이를 수행 할 수 있음 ).
Gilles

Ubuntu 18.04 LTS 데스크탑 : Unity : Unity7 : ubuntu 세션 : unity
user2584621
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.