답변:
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-2d
및 echo $XDG_CURRENT_DESKTOP
보였다 Unity
.
신선한 우분투 15.10에의 설치 Ubuntu desktop
에서, 오래된 노트북에 소프트웨어 출력의 첫 번째 줄을 wmctrl -m
이었다 Name: Compiz
그동안 DESKTOP_SESSION
및 XDG_CURRENT_DESKTOP
값을했다 ubuntu
및Unity
ssh -Y {host} 'wmctrl -m'
은 일부 값 (예 : "Name : Compiz"및 여러 N / A)을 반환하지만 ssh
창 관리자에 대한 정보는 제한적입니다.
wmctrl -d
창 관리자 wmctrl -l
로 Xubuntu Wily에서 (창 관리자가 관리하는 모든 데스크톱 나열) 또는 ( 창 관리자 가 관리하는 창 나열 ) 중 하나가 제대로 작동합니까?
리눅스 시스템에 나는 환경 변수를 테스트 XDG_CURRENT_DESKTOP
하고 GDMSESSION
다음과 같은 결과를 얻었다.
이 줄을 사용하여 출력을 얻을 수 있습니다.
printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GDMSESSION=ubuntu-wayland
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
MIR_SERVER_NAME도 설정되어 있습니다
MIR_SERVER_NAME=session-$NUMBER
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xfce
XDG_CURRENT_DESKTOP=
GDMSESSION=kde-plasma
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
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
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=cinnamon
XDG_CURRENT_DESKTOP=KDE
GDMSESSION=default
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=default
XDG_CURRENT_DESKTOP=LXDE
GDMSESSION=Lubuntu
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=cinnamon
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome
XDG_CURRENT_DESKTOP=MATE
GDMSESSION=mate
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xubuntu
터미널 유형 env
에서 모든 환경 변수를 봅니다. 그들 중 일부는 다음과 같습니다.
XDG_CURRENT_DESKTOP- 사용중인 데스크탑 환경을 알려줍니다
GDMSESSION- 로그인 할 lightdm greeter에서 선택한 옵션을 알려줍니다.
그것들을 사용하려면 터미널로 이동하여 다음을 입력하십시오.
echo $XDG_CURRENT_DESKTOP
(Unity를 사용하는 경우 'unity'와 같은 출력)
또는
echo $GDMSESSION
(로그인에서 우분투를 선택한 경우 'ubuntu'또는 로그인에서 해당 항목을 선택한 경우 'ubuntu-2d'와 같은 출력이 표시됩니다.)
DESKTOP_SESSION 및 COMPIZ_CONFIG_PROFILE 과 env
같은 출력을 자세히 보면 다른 사람들이 있습니다.
당신이 찾고있는 것은 사용중인 창 관리자의 이름이므로, 이것을 얻는 방법을 보는 유일한 방법은 프로세스 목록을 보는 것입니다. 이를 위해 pgrep
( Wikipedia ) 라는 명령이 있습니다 . 매개 변수 -l이 프로세스 ID를 추가하기 때문에 이름을 얻기 위해 다음을 수행했습니다.
pgrep -l compiz |cut -d " " -f2
프로세스가 동일한 사용자에 의해 실행되므로 sudo 부분을 접두사로 사용할 필요가 없습니다. 그런 다음이를 사용하여 창 관리자를 기반으로 작업을 수행하는 스크립트를 만들 수 있습니다.
그냥 단어를 변경, 다른 유형을 확인합니다 compiz
다른 등으로 mutter
, kwin
, 등
$XDG_CURRENT_DESKTOP
창 관리자가 아닌 현재 데스크탑 환경입니다.
내가 발견 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}]
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t
)
은 마지막에 누락 된 것 같아요 .
xprop -root -notype
모든 루트 창의 속성을 표시하고 (더 쉽게 구문 분석하기 위해 유형을 생략) 출력은 awk
파이프 를 통해 전송됩니다 . 2. awk
명령 $1=="_NET[blah]CK:"{print $5}'
은 파이프를 통해 얻은 입력의 각 행의 첫 번째 열을 주어진 문자열과 비교하고 일치하는 것을 찾으면 대괄호로 코드를 실행 하여이 행의 다섯 번째 열을 인쇄합니다-우연히도 우연히 발생합니다. 나는 "_NET_SUPPORTING_WM_CHECK"아톰의 ID가 될 것이다. 3.이 ID는 다음과 윈도우 관리자의 속성을 얻기 위해 다시 사용됩니다xprop -id
나는 또한 KDE로 테스트 해 왔으며 결론은 다음과 같습니다.
a) HardInfo를 사용한 그래픽 방식 : 대답은 일반적으로 "운영 체제"> "데스크탑 환경"에 있지만 그렇지 않은 경우 "환경 변수"를 볼 수 있습니다. HardInfo는 KDE가있는 배포판을 제외한 모든 테스트 된 배포판을 사용할 수 있지만 쉽고 빠르게 설치할 수 있습니다 (Linux Mint 13에 2 개의 패키지 만).
b)이 명령이있는 명령 행 : ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm"
. 더 많은 행에 나타나는 항목이 답이되어야합니다 (추첨이있는 경우 "세션"이있는 항목이 해결 책임).
gnome-...
프로세스를 가지고 있습니다 (와 kde 적중 kdevtmpfs
)
#! /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
이것은 dbus와 계정 서비스 (우분투에서 기본적으로)로 가능합니다.
$ qdbus --system org.freedesktop.Accounts \
> /org/freedesktop/Accounts/User1000 \
> org.freedesktop.Accounts.User.XSession
ubuntu
lightdm (그래픽 로그인 화면)을 통해 로그인하여 이것을 테스트했다는 사실에 주목할 필요가 있습니다. 블랙 박스와 같은 고전적인 데스크탑을 감지했으며 분명히 Unity를 감지했습니다. 나는 이것이 사용자가 로그인 화면에서 세션으로 선택한 값이라고 생각합니다. 그래서 프로세스 검사를 사용하는 것이 조금 더 쉽습니다.
다음 스크립트 는 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"
라는 도구를 사용할 수 있습니다 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
하고 창 관리자에 대한 정보를 추가합니다.
실행중인 프로세스에서 알려진 창 관리자를 확인하는 것만 생각할 수 있습니다. gconf에는 선호하는 창 관리자로 설정된 키가 있었지만 Gnome 2.12 이후에는 더 이상 사용되지 않습니다.
만약 이것이 프로그래밍 목적이라면 모든 리눅스 창 관리자를 연구하는 것이 좋습니다. 인기있는 몇 가지는 :
명령을 사용하여 각각에 대해 점검을 수행해야합니다 pgrep -l $WINDOW_MANAGER
. 여기서 $WINDOW_MANAGER
점검하려는 창 관리자의 이름입니다. 이 pgrep
명령은 실행중인 프로세스를 확인합니다.
Gnome Shell이 창 관리자로 간주되는지 100 % 확실하지 않습니다. /usr/bin/gnome-wm
스크립트 의 목록에서 얻은 나머지 창 관리자 이 스크립트는 실제로 사용 가능해야합니다 (새로 설치 한 상태이므로). 제 경우에는 compiz
기본 창 관리자가 아닌 (Gnome 세션이 아닌) 실행하려고합니다 .
편집하다:
@Anarci의 의견은 더 정확한 것 같습니다. 내 경우에는 그것을 보여 주었다 gnome-shell
.
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
$DISPLAY
환경에서 검사 하여이를 수행 할 수 있음 ).