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 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
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.
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_DESKTOPdan GDMSESSIONdan 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:GNOMEGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=ubuntu:GNOMEGDMSESSION=ubuntu-waylandXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuCatatan MIR_SERVER_NAME juga disetel
MIR_SERVER_NAME=session-$NUMBERXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=XFCEGDMSESSION=xfceXDG_CURRENT_DESKTOP=GDMSESSION=kde-plasmaXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu-2dXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-shellXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-classicXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-fallbackXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=cinnamonXDG_CURRENT_DESKTOP=KDEGDMSESSION=defaultXDG_CURRENT_DESKTOP=X-CinnamonGDMSESSION=defaultXDG_CURRENT_DESKTOP=LXDE GDMSESSION=LubuntuXDG_CURRENT_DESKTOP=X-Cinnamon GDMSESSION=cinnamonXDG_CURRENT_DESKTOP=GNOME GDMSESSION=gnomeXDG_CURRENT_DESKTOP=MATEGDMSESSION=mateXDG_CURRENT_DESKTOP=XFCEGDMSESSION=xubuntuDalam 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 ..
$XDG_CURRENT_DESKTOPadalah lingkungan desktop saat ini, BUKAN manajer jendela.
Saya menemukan pstreebantuan 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 -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
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: i3bagiannya. Dalam kasus saya manajer jendela yang saya gunakan adalah i3.
Opsi -Smenampilkan info sistem dan xmenambahkan 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_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.
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
$DISPLAYdi lingkungannya).