Hangi pencere yöneticisinin çalıştığını belirleme


180

Geçerli oturumda hangi pencere yöneticisinin aktif olarak çalıştığını belirlemek için herhangi bir yol var mı (örneğin bir komut veya çevre değişkeni gibi) ?

Yanıtlar:


145

Eğer wmctrlyüklediyseniz, komuttan ilk çıktı satırı

    wmctrl -m

size pencere yöneticisinin adını gösterecektir. Eğer var yoksa wmctrlyüklü, yüklemek için aşağıdaki komutu kullanın:

    sudo apt-get install wmctrl

Not, man wmctrl(yani, mansayfanın wmctrl) bölümünde şöyle yazıyor:

-m Pencere yöneticisi hakkında bilgi görüntüle ...

Benim Ubuntu 11.10 Açık / Linux 3.0.0-14-jenerik # 23-Ubuntu x86_64 / metacity sürümü 2.34.1 sistemi, gelen çıkışının ilk satırı wmctrl -moldu: Name: Metacity
süre echo $DESKTOP_SESSIONgösterdi ubuntu-2dve echo $XDG_CURRENT_DESKTOPgösterdi Unity.

Taze Ubuntu 15.10 üzerinde yükleme Ubuntu desktopitibaren, eski bir dizüstü yazılım çıkışının ilk satırı wmctrl -moldu: Name: Compiz
iken DESKTOP_SESSIONve XDG_CURRENT_DESKTOPdeğerleri ubuntuveUnity


4
Ne yazık ki bu, X11 etkin olsa bile ssh ile çalışmaz.
Sridhar Sarnobat

1
@ 15.04 ubuntu'daki Sridhar-Sarnobat, çalışan ssh -Y {host} 'wmctrl -m'bazı değerler döndürüyor (örneğin, "Name: Compiz" ve birkaç N / A), ancak sshpencere yöneticisi hakkında sınırlı bilgiye sahip olacağı mantıklı .
michael,

debian tarçın çalıştıran, bu çalışmıyor. wmctrl -m çıktısı Name: Mutter (Muffin) iken $ XDG_CURRENT_DESKTOP = X-Tarçın
Floyd

Xubuntu Wily'de, Window Maker 0.95.6'nın çalıştırılması - wmctrl, tüm girişler için N / A raporlar. GDMSESSION genel ortak olarak ayarlanmış ancak XDG_CURRENT_DESKTOP ayarlanmamış.
Mei,

@Mei, Window Maker'ı karşılaştırabileceğiniz diğer sistemlerde çalışıyor mu? Ayrıca, wmctrl -d(Pencere yöneticisi tarafından yönetilen tüm masaüstlerini listele) veya wmctrl -l( Pencere yöneticisi tarafından yönetilen pencereleri listele ) seçeneklerinden herhangi biri Xubuntu Wily ile Pencere Oluşturucu'da çalışır mı?
James Waldby - jwpat7

102

Linux sistemlerde ben ortam değişkenleri test XDG_CURRENT_DESKTOPve GDMSESSIONaşağıdaki sonuçlar elde ettim.

Çıktı almak için bu satırı kullanabilirsiniz:

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

Ubuntu 18.04 (Ubuntu)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu

Ubuntu 18.04 (Wayland'da Ubuntu)

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

Ubuntu 16.04


Birlik (7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Ubuntu 14.04


Mir ile çalışan birlik

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Not MIR_SERVER_NAME da ayarlandı

  • MIR_SERVER_NAME=session-$NUMBER

Mir olmadan çalışan birlik

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

XFCE

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xfce

Ubuntu 12.04


KDE

  • XDG_CURRENT_DESKTOP=
  • GDMSESSION=kde-plasma

Birlik 3d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Birlik 2d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu-2d

cüce

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-shell

GNOME Klasik

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-classic

Gnome Classic (efekt yok)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-fallback

Ubuntu tabanlı diğer dağıtımlar


Nane 13 (Tarçın)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=cinnamon

Nane 16 (KDE baskısı)

  • XDG_CURRENT_DESKTOP=KDE
  • GDMSESSION=default

Nane 17 (Tarçın)

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=default

Lubuntu 12.04

  • XDG_CURRENT_DESKTOP=LXDE
  • GDMSESSION=Lubuntu

Wasta 14.04 / 18.04

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=cinnamon

Gnome masaüstünü kullanarak Wasta 14.04.

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome

Ubuntu Mate 18.04

  • XDG_CURRENT_DESKTOP=MATE
  • GDMSESSION=mate

Xubuntu 18.04

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xubuntu

4
Nane 13 (Tarçın): XDG_CURRENT_DESKTOP = GNOME, GDMSESSION = tarçın
rik-shaw

1
Lubuntu 12.04: XDG_CURRENT_DESKTOP = LXDE, GDMSESSION = Lubuntu
rik-shaw

Peki ya $ DESKTOP_SESSION? Yedekleme çözümü olarak :)
Savvas Radevic

1
GDM kullanmazsam ne olur?
Robert Siemer,

6
Ve ayrıca hangi pencere yöneticisini kullandığımı cevaplamıyor !
Robert Siemer

42

envTüm ortam değişkenlerini görmek için terminal tipinde . Onlardan bazıları:

XDG_CURRENT_DESKTOP - Hangi masaüstü ortamını kullandığınızı gösterir

GDMSESSION - Lightdm selamlayıcıdan giriş yapmak için hangi seçeneği seçtiğinizi gösterir.

Bunları kullanmak için terminale gidin ve şunu yazın:

echo $XDG_CURRENT_DESKTOP

(Birlik kullanıyorsanız, örneğin 'birlik' çıktısını alacak)

veya

echo $GDMSESSION  

(Girişte ubuntu'yu seçtiyseniz 'ubuntu' veya girişte birini seçtiyseniz 'ubuntu-2d' çıktısını alın.)

DESKTOP_SESSION ve COMPIZ_CONFIG_PROFILEenv gibi çıktılara daha yakından bakarsanız başkalarına da sahip olabilirsiniz.

Aradığın şey, Pencere Yöneticisinin ne kullandığı adı olduğundan, bunu elde etmenin tek yolu süreç listesine bakmaktır. Bunu yapmak için pgrep( Wikipedia ) adında bir komut var . -L parametresi işlem kimliğini eklediğinden adı almak için aşağıdakileri yaptım:

pgrep -l compiz |cut -d " " -f2işlem aynı kullanıcı tarafından çalıştığından, sudo bölümünü ön eklemeye gerek yoktur. Bunu daha sonra Pencere Yöneticisine dayalı bir işlem yapan bir komut dosyası oluşturmak için kullanabilirsiniz.

Az önce haber değiştirmek diğer türleri aramak için compizbaşka benzerine mutter, kwinvb ..


2
Bunlar sadece oturum adını ve masaüstü ortamını anlatıyor. Örnek olarak, Metacity, Mutter, Compiz veya diğer pencere yöneticilerini kullanabilen bir masaüstü ortamı olan "GNOME" yazıyor. Bir oturum adı olan "gnome-classic" diyor, bu isimde böyle bir pencere yöneticisi yok.
Anonim

1
İşte gidiyorsun. İşlem listesine yardımcı olabilecek bir komut bulundu. pgrep. Bu kısma geldim, en azından eğer bulunursa, pencere yöneticisinin adını gösterir. Hepsini oraya ekleyebilir miyim kontrol etmeye çalışıyorum. Sorunuz çok iyi, çünkü Ubuntu 11.10 Compiz kullanarak biraz şaşırtıyor (ya da Gnome 3.x olduğunda mümkünse), Unity'de kullanılan gerçek Window Manager'ı işaret etmek güzel olurdu.
Luis Alvarado

$XDG_CURRENT_DESKTOPpencere yöneticisi değil, mevcut masaüstü ortamıdır.
Ken Sharp,

24

pstreeBüyük bir yardım buldum .

Kurulum

sudo apt-get install pstree

çıktı

Elimde bu var.

 ├─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
Bu beni özel buildroot sistemimle oraya götürdü.
jc__

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

1
Bunun nasıl çalıştığını açıklayabilir misiniz? Ayrıca, )sonunda bir eksik olduğunu düşünüyorum .
Louis Matthijssen

@LouisMatthijssen 1. xprop -root -notype, kök penceresinin tüm özelliklerini gösterir (ve daha kolay ayrıştırma için türleri atlar), çıktı awkboru yoluyla gönderilir ; 2. awkkomut $1=="_NET[blah]CK:"{print $5}', borudan aldığı girişin her bir satırının ilk sütununu verilen bir dizeyle karşılaştırır ve eşleşmeyi bulursa, kodu bu satırdan beşinci sütunu basan parantez içinde çalıştırır - tam olarak, (tamamen kazara, Bahse girerim) "_NET_SUPPORTING_WM_CHECK" atomunun kimliği olmak; 3. bu kimlik daha sonra Windows Manager'ın özelliklerini almak için tekrar kullanılırxprop -id
cprn

4

KDE ile de test yapıyorum ve sonucum:

a) HardInfo ile grafiksel yol: cevap normalde "İşletim Sistemi"> "Masaüstü Ortamı" dır, ancak değilse "Ortam değişkenleri" ifadesini arayamazsınız. HardInfo, KDE'li hariç tüm test edilen dağıtımlarla hazırdır, ancak kolayca ve hızlı bir şekilde kurulabilir (Linux Mint 13'te yalnızca 2 paket).

bu komutla b) Komut satırı,: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm". Daha fazla satırda görünen madde cevap olmalıdır (eğer "session" ile beraberlik varsa bir çözüm olmalıdır).


XFCE ayrıca çeşitli gnome-...işlemlere sahiptir (ve bir kdevtmpfs
vuruşla çarptırılmıştır

2

Yukarıdakilerin hiçbiri aslında benim için işe yaramadı, sadece mevcut masaüstü oturumum olarak çalışan Gnome olup olmadığını bilmek istedim.

İşe yarayan şey bu, terminal açmak

lsb_release -a

(UBUNTU makineme hangi tat veya versiyonumu kurduğumu kontrol etmek için)

ls /usr/bin/*session

(şu anda hangi masaüstü oturumunun / masaüstü ortamının kullanılmakta olduğunu başlatır)

gnome-shell --version 

(hangi gnome versiyonunun kurulu olduğunu bulmak için)


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

Veya bir satırda:

id = $ (xprop -root -notype | awk '$ 1 == "_ NET_SUPPORTING_WM_CHECK:" {$ 5}' yazdırın); xprop -id "$ {id}" -notype -f _NET_WM_NAME 8t | grep "_NET_WM_NAME =" | cut --delimiter = '' - alanlar = 3 | cut --delimiter = '"' - alanlar = 2


0

Bu, dbus ve Hesaplar Servisi ile mümkün (her ikisi de varsayılan olarak Ubuntu'da).

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

Bunu lightdm (yani grafiksel giriş ekranı) aracılığıyla oturum açarak test ettiğime dikkat çekmek gerekirse, blackbox gibi klasik bir masaüstünü tespit etti ve Unity'yi açıkça tespit etti. Bunun, kullanıcının oturum açma oturumunda oturum olarak seçtiği şeyin bir değeri olduğundan şüpheleniyorum, bu yüzden işlemler için bu kontrolü kullanmak biraz daha kolay


0

Senaryo

Aşağıdaki komut dosyası , unix.se adresinde gönderdiğim benzer bir sorunun en iyi cevabı olarak sonuçlandı . Ayrıca Unity ve LXDE ile de harika çalışıyor.

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

Denilen aracı kullanabilirsiniz inxi. Ubuntu Depolarından aşağıdaki adresten temin edilebilir:

sudo apt install inxi

veya github'dan: https://github.com/smxi/inxi

Sadece komutu aşağıdaki gibi çalıştırın:

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)

Parçayı not edin Desktop: i3. Benim durumumda kullandığım pencere yöneticisi i3.

Seçenek -Ssistem bilgisini görüntüler ve xpencere yöneticisi hakkında bilgi ekler.


-3

Çalışan pencerelerde yalnızca bilinen pencere yöneticilerini kontrol etmeyi düşünebilirim. Gconf'da tercih edilen pencere yöneticisine ayarlanan bir anahtar vardı, ancak Gnome 2.12'den beri kullanımdan kaldırıldı.

Bu, eğer programlama amaçlıysa, tüm linux pencere yöneticileri için araştırma yapmanızı öneririm; bazı popülerler:

  • gnome-kabuk *
  • compiz'i
  • metacity sürümü
  • homurdanma
  • testere balığı

Her biri için komut içeren bir kontrol çalıştırmanız gerekir pgrep -l $WINDOW_MANAGER, burada $WINDOW_MANAGERkontrol etmek istediğiniz pencere yöneticisinin adı. pgrepSüreçleri çalıştırmak için komut kontrol eder.

Gnome Shell'in bir pencere yöneticisi olarak kabul edilip edilmediğinden% 100 emin değilim; Pencere yöneticilerinin geri kalanını /usr/bin/gnome-wmsenaryodaki bir listeden aldım . Aslında bu betik kullanılabilir durumda olmalı (temiz bir kurulumda günümüze geldiğinden beri) ancak benim durumumda compizvarsayılan pencere yöneticim olmayan (Gnome oturumumda değil) benim çalışmam gerekiyor.

DÜZENLE:

@Anarci'nin yorumu daha doğru görünüyor. Benim durumumda gösterdi gnome-shell.


1
Pgrep, regex'i desteklemektedir, böylece değişimli bir desen kullanılabilir. pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
Anonim

1
Bu yeterli değil: kullanıcı farklı yöneticilerle birkaç X oturumu çalıştırıyorsa? En azından ilgilendiğiniz ekranda pencere yöneticisinin çalışıp çalışmadığını kontrol etmelisiniz (bunu $DISPLAYortamında inceleyerek yapabilirsiniz ).
Gilles

Ubuntu 18.04 LTS Masaüstü: Birlik: Birlik7: ubuntu Oturum: birlik
kullanıcı2584621
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.