Cara menentukan window manager mana yang sedang berjalan

180

Apakah ada cara (seperti variabel perintah atau lingkungan) untuk menentukan window manager apa yang aktif berjalan di sesi saat ini?

Anonim, tanpa nama
sumber

Jawaban:

145

Jika Anda telah wmctrlmenginstal, baris pertama output dari perintah

    wmctrl -m

akan menunjukkan kepada Anda nama manajer jendela. Jika Anda belum wmctrlmenginstal, gunakan perintah berikut untuk menginstalnya:

    sudo apt-get install wmctrl

Catatan, man wmctrl(yaitu, manhalaman untuk wmctrl) mengatakan sebagian:

-m Menampilkan informasi tentang pengelola jendela ...

Pada sistem Ubuntu 11.10 / Linux 3.0.0-14-generik # 23-Ubuntu x86_64 / metacity 2.34.1 saya, baris pertama keluaran wmctrl -madalah: Name: Metacity
sambil echo $DESKTOP_SESSIONditunjukkan ubuntu-2ddan echo $XDG_CURRENT_DESKTOPditunjukkan Unity.

Pada Ubuntu segar 15.10 menginstal Ubuntu desktopperangkat lunak pada laptop tua, baris pertama dari keluaran dari wmctrl -mitu: Name: Compiz
sementara DESKTOP_SESSIONdan XDG_CURRENT_DESKTOPnilai-nilai yang ubuntudanUnity

James Waldby - jwpat7
sumber
4
Sayangnya ini tidak berhasil pada ssh bahkan jika X11 diaktifkan.
Sridhar Sarnobat
1
@ Sridhar-Sarnobat di ubuntu 15.04, menjalankan ssh -Y {host} 'wmctrl -m'mengembalikan beberapa nilai (misalnya, "Nama: Compiz", dan beberapa N / A), tetapi masuk akal bahwa sshakan ada info terbatas tentang pengelola jendela.
michael
pada debian running cinnamon, ini tidak berfungsi. output dari wmctrl -m adalah Name: Mutter (Muffin) sementara $ XDG_CURRENT_DESKTOP = X-Cinnamon
Floyd
Di Xubuntu Wily, menjalankan Window Maker 0.95.6 - wmctrl melaporkan N / A untuk semua entri. GDMSESSION diatur ke wmaker-common tetapi XDG_CURRENT_DESKTOP tidak diatur sama sekali.
Mei
@Mei, apakah Anda menjalankan Window Maker pada sistem lain yang dapat Anda bandingkan? Juga, apakah salah satu dari wmctrl -d(Mendaftar semua desktop yang dikelola oleh manajer jendela) atau wmctrl -l(Daftar jendela yang dikelola oleh manajer jendela) berfungsi dengan baik di Xubuntu Wily dengan Window Maker?
James Waldby - jwpat7
102

Pada sistem Linux saya diuji variabel lingkungan XDG_CURRENT_DESKTOPdan GDMSESSIONdan mendapat hasil sebagai berikut.

Anda dapat menggunakan baris ini untuk mendapatkan output:

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

Ubuntu 18.04 (Ubuntu)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu

Ubuntu 18.04 (Ubuntu di Wayland)

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

Ubuntu 16.04


Unity (7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Ubuntu 14.04


Persatuan berjalan dengan Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Catatan MIR_SERVER_NAME juga disetel

  • MIR_SERVER_NAME=session-$NUMBER

Persatuan berjalan tanpa Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

XFCE

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xfce

Ubuntu 12.04


KDE

  • XDG_CURRENT_DESKTOP=
  • GDMSESSION=kde-plasma

Persatuan 3d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Unity 2d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu-2d

Gnome

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-shell

Gnome Classic

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-classic

Gnome Classic (tidak ada efek)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-fallback

Distribusi berbasis Ubuntu lainnya


Mint 13 (Kayu Manis)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=cinnamon

Mint 16 (edisi KDE)

  • XDG_CURRENT_DESKTOP=KDE
  • GDMSESSION=default

Mint 17 (Kayu Manis)

  • 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

Wasta 14.04 menggunakan desktop Gnome.

  • 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
Tom
sumber
4
Permen 13 (Kayu Manis): XDG_CURRENT_DESKTOP = GNOME, GDMSESSION = kayu manis
rik-shaw
1
Lubuntu 12.04: XDG_CURRENT_DESKTOP = LXDE, GDMSESSION = Lubuntu
rik-shaw
Bagaimana dengan $ DESKTOP_SESSION? Sebagai solusi cadangan :)
Savvas Radevic
1
Bagaimana jika saya tidak menggunakan GDM?
Robert Siemer
6
Dan selanjutnya itu tidak menjawab window manager apa yang saya gunakan!
Robert Siemer
42

Dalam tipe terminal envuntuk melihat semua variabel lingkungan. Beberapa dari mereka adalah:

XDG_CURRENT_DESKTOP - Memberitahu Anda apa lingkungan desktop yang Anda gunakan

GDMSESSION - Memberitahu Anda opsi apa yang Anda pilih dari penyambut lightdm untuk login.

Untuk menggunakannya, buka terminal dan ketik:

echo $XDG_CURRENT_DESKTOP

(Akan menampilkan misalnya 'unity' jika Anda menggunakan Unity)

atau

echo $GDMSESSION  

(Akan menampilkan misalnya 'ubuntu' jika Anda memilih ubuntu di login atau 'ubuntu-2d' jika Anda memilih yang di login.)

Anda memiliki orang lain jika Anda melihat lebih dekat pada output envseperti DESKTOP_SESSION dan COMPIZ_CONFIG_PROFILE

Karena apa yang Anda cari adalah nama Window Manager apa yang digunakan, satu-satunya cara saya melihat cara mendapatkannya adalah dengan melihat di daftar proses. Untuk melakukan ini ada perintah yang disebut pgrep( Wikipedia ). Saya melakukan yang berikut untuk mendapatkan nama karena parameter -l menambahkan ID proses:

pgrep -l compiz |cut -d " " -f2karena proses ini dijalankan oleh pengguna yang sama, tidak perlu awalan bagian sudo. Anda kemudian dapat menggunakan ini untuk membuat skrip yang melakukan tindakan berdasarkan Window Manager.

Untuk mencari jenis lain, hanya mengubah kata compizlain seperti mutter, kwin, dll ..

Luis Alvarado
sumber
2
Itu hanya memberi tahu saya nama sesi dan lingkungan desktop. Contohnya tertulis "GNOME" yang merupakan lingkungan desktop yang dapat menggunakan Metacity, Mutter, Compiz atau window manager lainnya. Ia mengatakan "gnome-classic" yang merupakan nama sesi, tidak ada window manager dengan nama itu.
Anonim
1
Ini dia. Ditemukan perintah yang dapat membantu dengan daftar proses. pgrep. Sampai di bagian itu, setidaknya itu menunjukkan kepada Anda nama window manager jika ditemukan. Mencoba memeriksa apakah saya dapat menambahkan semuanya di sana. Pertanyaan Anda sangat bagus karena Ubuntu 11.10 sedikit membingungkan dengan menggunakan Compiz (Atau bergumam jika ketika Gnome 3.x) jadi akan lebih baik untuk menunjukkan Window Manager aktual yang digunakan di Unity.
Luis Alvarado
$XDG_CURRENT_DESKTOPadalah lingkungan desktop saat ini, BUKAN manajer jendela.
Ken Sharp
24

Saya menemukan pstreebantuan besar.

Instalasi

sudo apt-get install pstree

keluaran

Ini yang saya dapat.

 ├─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}]
Sridhar Sarnobat
sumber
1
ini membuat saya di sana dengan sistem buildroot khusus saya.
jc__
11
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t 
ruario
sumber
1
Bisakah Anda menjelaskan cara kerjanya? Juga, saya pikir Anda kehilangan sebuah )di akhir.
Louis Matthijssen
@LouisMatthijssen 1. xprop -root -notypemenampilkan semua properti jendela root (dan menghilangkan tipe untuk penguraian yang lebih mudah), hasilnya dikirim ke awkmelalui pipa; 2. awkinstruksi $1=="_NET[blah]CK:"{print $5}'membandingkan kolom pertama dari setiap baris input yang didapat melalui pipa dengan string yang diberikan dan jika menemukan kecocokan, ia menjalankan kode dalam tanda kurung yang mencetak kolom kelima dari baris ini - kebetulan (seluruhnya karena kebetulan, Saya yakin) untuk menjadi ID dari atom "_NET_SUPPORTING_WM_CHECK"; 3. ID ini kemudian digunakan lagi untuk mendapatkan properti Windows Manager denganxprop -id
cprn
4

Saya telah menguji juga dengan KDE dan kesimpulan saya adalah:

a) Cara grafis, dengan HardInfo: jawabannya biasanya di "Sistem Operasi"> "Lingkungan Desktop", tetapi jika tidak, Anda dapat melihat ke "variabel Lingkungan". HardInfo siap dengan semua distro yang diuji, kecuali yang dengan KDE, tetapi dapat dengan mudah dan cepat diinstal (hanya 2 paket di Linux Mint 13).

b) Command line, dengan perintah ini: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm". Item yang muncul di lebih banyak baris harus menjadi jawaban (jika ada gambar item dengan "sesi" harus menjadi solusinya).

Msedfi
sumber
XFCE juga memiliki beberapa gnome-...proses (dan hit dengan KDE kdevtmpfs)
Xen2050
2

Tidak satu pun di atas yang benar-benar bekerja untuk saya, saya hanya ingin tahu apakah saya menjalankan Gnome sebagai sesi desktop saya saat ini.

Inilah yang berhasil, buka terminal

lsb_release -a

(untuk memeriksa rasa atau versi yang telah saya instal di mesin UBUNTU saya)

ls /usr/bin/*session

(meluncurkan sesi desktop / lingkungan desktop mana yang sedang digunakan)

gnome-shell --version 

(untuk mengetahui versi gnome yang diinstal)

NanuBuria
sumber
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

Atau dalam satu baris:

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 = '"' --fields = 2

Alberto Salvia Novella
sumber
0

Ini mungkin dilakukan dengan dbus dan Layanan Akun (keduanya secara default di Ubuntu).

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

Perlu dicatat bahwa saya telah menguji ini dengan masuk melalui lightdm (yaitu layar login grafis), ia mendeteksi desktop klasik seperti blackbox, dan jelas mendeteksi Unity. Saya menduga ini adalah nilai dari apa yang dipilih pengguna pada layar login sebagai sesi, itu sebabnya sedikit lebih mudah digunakan untuk memeriksa proses

Sergiy Kolodyazhnyy
sumber
0

Naskah

Script berikut mengakibatkan sebagai jawaban terbaik untuk serupa pertanyaan saya posted lebih di unix.se . Ini juga berfungsi dengan baik dengan Unity dan 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"
Serge Stroobandt
sumber
0

Anda dapat menggunakan alat yang disebut inxi. Ini dapat diperoleh dari Gudang Ubuntu dengan:

sudo apt install inxi

atau dari github: https://github.com/smxi/inxi

Jalankan saja perintahnya sebagai berikut:

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)

Catat Desktop: i3bagiannya. Dalam kasus saya manajer jendela yang saya gunakan adalah i3.

Opsi -Smenampilkan info sistem dan xmenambahkan info tentang pengelola jendela.

Michal Przybylowicz
sumber
-3

Saya hanya bisa memikirkan memeriksa manajer jendela yang dikenal dalam proses yang berjalan. Dulu ada kunci dalam gconf yang disetel ke pengelola jendela pilihan, tetapi sudah tidak digunakan lagi sejak Gnome 2.12.

Jadi, jika ini untuk tujuan pemrograman, saya sarankan Anda untuk melakukan riset untuk semua manajer jendela linux; beberapa yang populer adalah:

  • gnome-shell *
  • compiz
  • metacity
  • bergumam
  • ikan hiu todak

Anda harus menjalankan pemeriksaan untuk masing-masing dengan perintah pgrep -l $WINDOW_MANAGER, di mana $WINDOW_MANAGERnama manajer jendela yang ingin Anda periksa. The pgrepperintah memeriksa proses yang berjalan.

Saya tidak 100% yakin jika Gnome Shell dianggap sebagai manajer jendela; sisa manajer jendela yang saya dapatkan dari daftar di /usr/bin/gnome-wmskrip. Skrip ini sebenarnya harus dapat digunakan (karena ini ada pada instalasi yang bersih) tetapi dalam kasus saya ini mencoba untuk menjalankan compizyang bukan window manager default saya (bukan di sesi Gnome saya).

SUNTING:

Komentar @Anarci sepertinya lebih akurat. Dalam kasus saya itu memang terlihat gnome-shell.

Severo Raz
sumber
1
Tampaknya pgrep mendukung regex sehingga pola dengan pergantian dapat digunakan. pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
Anonim
1
Itu tidak cukup: bagaimana jika pengguna menjalankan beberapa sesi X dengan manajer yang berbeda? Setidaknya Anda harus memeriksa bahwa palungan jendela yang beroperasi pada tampilan yang Anda minati (Anda dapat melakukannya dengan memeriksa $DISPLAYdi lingkungannya).
Gilles
Ubuntu 18.04 LTS Desktop: Unity: Unity7: ubuntu Session: unity
user2584621