जवाबों:
यदि आपने wmctrl
स्थापित किया है, तो कमांड से आउटपुट की पहली पंक्ति
wmctrl -m
आपको विंडो मैनेजर का नाम दिखाएगा। यदि आपने wmctrl
इंस्टॉल नहीं किया है, तो इसे स्थापित करने के लिए निम्न कमांड का उपयोग करें:
sudo apt-get install wmctrl
नोट, man wmctrl
(यह है, man
पृष्ठ के लिए wmctrl
) भाग में कहते हैं:
-म विंडो प्रबंधक के बारे में जानकारी प्रदर्शित करें ...
मेरे उबंटू 11.10 / लिनक्स 3.0.0-14-जेनेरिक # 23-उबंटू x86_64 / मेटासिटी 2.34.1 सिस्टम पर, से आउटपुट की पहली लाइन wmctrl -m
थी: Name: Metacity
जबकि echo $DESKTOP_SESSION
दिखाया ubuntu-2d
और echo $XDG_CURRENT_DESKTOP
दिखाया गया था Unity
।
Ubuntu desktop
एक पुराने लैपटॉप पर सॉफ्टवेयर के एक नए Ubuntu 15.10 इंस्टॉलेशन पर, आउटपुट की पहली पंक्ति wmctrl -m
थी: Name: Compiz
जबकि DESKTOP_SESSION
और XDG_CURRENT_DESKTOP
मान थे ubuntu
औरUnity
ssh -Y {host} 'wmctrl -m'
कुछ मान लौट आते हैं (उदाहरण के लिए, "नाम: कॉम्पिज़" और कई एन / ए के), लेकिन यह समझ में आता है कि ssh
विंडो प्रबंधक के बारे में सीमित जानकारी होगी।
wmctrl -d
(विंडो मैनेजर द्वारा प्रबंधित सभी डेस्कटॉप की सूची दें) या wmctrl -l
(विंडो मैनेजर द्वारा प्रबंधित की जा रही विंडो की सूची) विंडो मेकर के साथ जुबांटु विली पर ठीक काम करें?
Linux सिस्टम पर मैं वातावरण चर का परीक्षण किया 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 - आपको बताता है कि आपने लॉगिन करने के लिए लाइटएमडी अभिवादन से क्या विकल्प चुना है।
उनका उपयोग करने के लिए, टर्मिनल पर जाएं और टाइप करें:
echo $XDG_CURRENT_DESKTOP
(यदि आप एकता का उपयोग कर रहे हैं तो उदाहरण 'एकता' के लिए आउटपुट देगा)
या
echo $GDMSESSION
(यदि आप लॉगिन में ubuntu का चयन करते हैं या यदि आपने लॉगिन में चयन किया है तो 'ubuntu' उदाहरण के लिए आउटपुट देगा। '
यदि आप env
जैसे DESKTOP_SESSION और COMPIZ_CONFIG_FILE के आउटपुट को करीब से देखते हैं तो आपके पास अन्य हैं
चूँकि आप जो देख रहे हैं उसका नाम क्या है विंडो प्रबंधक उपयोग में है, केवल एक ही तरीका है कि मैं इसे कैसे प्राप्त करूं यह प्रक्रिया सूची में देख कर है। ऐसा करने के लिए एक कमांड pgrep
( विकिपीडिया ) कहा जाता है । मैंने नाम प्राप्त करने के लिए निम्नलिखित किया क्योंकि पैरामीटर -l प्रक्रिया आईडी जोड़ता है:
pgrep -l compiz |cut -d " " -f2
चूंकि प्रक्रिया एक ही उपयोगकर्ता द्वारा चल रही है, इसलिए सूडो भाग को उपसर्ग करने की आवश्यकता नहीं है। फिर आप इसका उपयोग एक स्क्रिप्ट बनाने के लिए कर सकते हैं जो विंडो मैनेजर पर आधारित एक एक्शन करती है।
अन्य प्रकार के लिए देखने के लिए, बस शब्द बदल 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" परमाणु की आईडी हो; 3. इस आईडी का उपयोग फिर से विंडोज मैनेजर की संपत्तियों को प्राप्त करने के लिए किया जाता हैxprop -id
मैंने केडीई के साथ भी परीक्षण किया है और मेरा निष्कर्ष है:
क) आलेखीय तरीका, हार्डइन्फो के साथ: उत्तर आम तौर पर "ऑपरेटिंग सिस्टम"> "डेस्कटॉप एनवायरनमेंट" में है, लेकिन यदि आप "एनवायर्नमेंटल वैरिएबल" को नहीं देख सकते हैं। हार्डइन्फो सभी परीक्षण किए गए डिस्ट्रो के साथ तैयार है, केडीई के साथ एक को छोड़कर, लेकिन इसे आसानी से और जल्दी से स्थापित किया जा सकता है (लिनक्स मिंट 13 में केवल 2 पैकेज)।
बी) कमांड लाइन, इस कमांड के साथ ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm"
:। अधिक पंक्तियों में दिखाई देने वाली वस्तु का उत्तर होना चाहिए (यदि "सत्र" के साथ एक ड्रॉ होना चाहिए तो समाधान होना चाहिए)।
gnome-...
प्रक्रियाएं भी हैं (और केडी हिट के साथ kdevtmpfs
)
उपरोक्त में से कोई भी वास्तव में मेरे लिए काम नहीं करता था, मैं सिर्फ यह जानना चाहता था कि क्या मैं अपने वर्तमान डेस्कटॉप सत्र के रूप में गनोम चल रहा था।
यह वही है जो काम करता है, एक टर्मिनल खोलें
lsb_release -a
(यह जांचने के लिए कि मैंने अपने UBUNTU मशीन पर कौन सा स्वाद या संस्करण स्थापित किया है)
ls /usr/bin/*session
(जो डेस्कटॉप सत्र / डेस्कटॉप वातावरण वर्तमान में उपयोग में है)
gnome-shell --version
(सूक्ति का कौन सा संस्करण स्थापित है यह जानने के लिए)
#! /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:" {प्रिंट $ 5}'); xprop -id "$ {id}" -notype -f _NET_WM_NAME 8t | grep "_NET_WM_NAME =" | cut --delimiter = '' --fields = 3 | cut - डेलिमिटर = '' '- फील्ड्स = 2
यह dbus और लेखा सेवा (उबंटू में डिफ़ॉल्ट रूप से दोनों) के साथ संभव है।
$ qdbus --system org.freedesktop.Accounts \
> /org/freedesktop/Accounts/User1000 \
> org.freedesktop.Accounts.User.XSession
ubuntu
वर्थ नोटिंग कि मैंने इसे lightdm के माध्यम से लॉगिंग के साथ परीक्षण किया है (यह आलेखीय लॉगिन स्क्रीन है), इसने ब्लैकबॉक्स जैसे क्लासिक डेस्कटॉप का पता लगाया और जाहिर तौर पर एकता का पता लगाया। मुझे संदेह है कि यह मान है कि उपयोगकर्ता सत्र के रूप में लॉगिन स्क्रीन पर क्या चुनता है, इसीलिए प्रक्रियाओं के लिए उस जाँच का उपयोग करना थोड़ा आसान है
निम्नलिखित स्क्रिप्ट के परिणामस्वरूप एक समान प्रश्न का सबसे अच्छा उत्तर मिला , जिसे मैंने unix.se पर पोस्ट किया था । यह यूनिटी और 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
। इसे उबंटू रिपोजिटरी से प्राप्त किया जा सकता है:
sudo apt install inxi
या गितुब से: 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
चल रही प्रक्रियाओं के लिए आदेश जाँच करता है।
यदि गनोम शेल को विंडो मैनेजर माना जाता है, तो मुझे 100% यकीन नहीं है; बाकी विंडो मैनेजर मुझे /usr/bin/gnome-wm
स्क्रिप्ट की एक सूची से मिले । यह स्क्रिप्ट वास्तव में प्रयोग करने योग्य होनी चाहिए (क्योंकि यह एक क्लीन इंस्टाल पर मौजूद है) लेकिन मेरे मामले में यह चलाने की कोशिश करता है compiz
जो कि मेरा डिफ़ॉल्ट विंडो मैनेजर नहीं है (मेरे गनोम सत्र में नहीं)।
संपादित करें:
वैसे @Anarci की टिप्पणी अधिक सटीक प्रतीत होती है। मेरे मामले में यह दिखा gnome-shell
।
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
$DISPLAY
इसके वातावरण में जांच करके कर सकते हैं )।