Apakah ada cara (seperti variabel perintah atau lingkungan) untuk menentukan window manager apa yang aktif berjalan di sesi saat ini?
Apakah ada cara (seperti variabel perintah atau lingkungan) untuk menentukan window manager apa yang aktif berjalan di sesi saat ini?
Jawaban:
Jika Anda telah wmctrl
menginstal, baris pertama output dari perintah
wmctrl -m
akan menunjukkan kepada Anda nama manajer jendela. Jika Anda belum wmctrl
menginstal, gunakan perintah berikut untuk menginstalnya:
sudo apt-get install wmctrl
Catatan, man wmctrl
(yaitu, man
halaman 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 -m
adalah: Name: Metacity
sambil echo $DESKTOP_SESSION
ditunjukkan ubuntu-2d
dan echo $XDG_CURRENT_DESKTOP
ditunjukkan Unity
.
Pada Ubuntu segar 15.10 menginstal Ubuntu desktop
perangkat lunak pada laptop tua, baris pertama dari keluaran dari wmctrl -m
itu: Name: Compiz
sementara DESKTOP_SESSION
dan XDG_CURRENT_DESKTOP
nilai-nilai yang ubuntu
danUnity
ssh -Y {host} 'wmctrl -m'
mengembalikan beberapa nilai (misalnya, "Nama: Compiz", dan beberapa N / A), tetapi masuk akal bahwa ssh
akan ada info terbatas tentang pengelola jendela.
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?
Pada sistem Linux saya diuji variabel lingkungan XDG_CURRENT_DESKTOP
dan GDMSESSION
dan mendapat hasil sebagai berikut.
Anda dapat menggunakan baris ini untuk mendapatkan output:
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
Catatan MIR_SERVER_NAME juga disetel
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
Dalam tipe terminal env
untuk 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 env
seperti 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 " " -f2
karena 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 compiz
lain seperti mutter
, kwin
, dll ..
$XDG_CURRENT_DESKTOP
adalah lingkungan desktop saat ini, BUKAN manajer jendela.
Saya menemukan pstree
bantuan besar.
sudo apt-get install pstree
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}]
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t
)
di akhir.
xprop -root -notype
menampilkan semua properti jendela root (dan menghilangkan tipe untuk penguraian yang lebih mudah), hasilnya dikirim ke awk
melalui pipa; 2. awk
instruksi $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
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).
gnome-...
proses (dan hit dengan KDE kdevtmpfs
)
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)
#! /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
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
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"
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: i3
bagiannya. Dalam kasus saya manajer jendela yang saya gunakan adalah i3
.
Opsi -S
menampilkan info sistem dan x
menambahkan info tentang pengelola jendela.
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:
Anda harus menjalankan pemeriksaan untuk masing-masing dengan perintah pgrep -l $WINDOW_MANAGER
, di mana $WINDOW_MANAGER
nama manajer jendela yang ingin Anda periksa. The pgrep
perintah 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-wm
skrip. Skrip ini sebenarnya harus dapat digunakan (karena ini ada pada instalasi yang bersih) tetapi dalam kasus saya ini mencoba untuk menjalankan compiz
yang bukan window manager default saya (bukan di sesi Gnome saya).
SUNTING:
Komentar @Anarci sepertinya lebih akurat. Dalam kasus saya itu memang terlihat gnome-shell
.
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
$DISPLAY
di lingkungannya).