سؤال كيفية تحديد مدير النوافذ الذي يعمل


هل هناك أي طريقة (مثل أمر أو متغير بيئي) لتحديد ما مدير النافذة هو واحد يعمل بنشاط في الدورة الحالية؟


151
2017-10-26 20:39


الأصل




الأجوبة:


اذا كنت تمتلك wmctrl تثبيت ، السطر الأول من الإخراج من الأمر

    wmctrl -m

سوف تظهر لك اسم مدير النافذة. إذا لم يكن لديك wmctrl مثبتة ، استخدم الأمر التالي لتثبيته:

    sudo apt-get install wmctrl

ملحوظة، man wmctrl (وهذا هو ، و man صفحة لـ wmctrl) يقول جزئيا:

م عرض معلومات حول مدير النوافذ ...

على نظام التشغيل Ubuntu 11.10 / Linux 3.0.0-14-generic # 23-Ubuntu x86_64 / metacity 2.34.1 ، يكون أول خط إنتاج من wmctrl -m كان: Name: Metacity
في حين echo $DESKTOP_SESSION أظهر ubuntu-2d و echo $XDG_CURRENT_DESKTOP أظهر Unity.

على تثبيت أوبونتو 15.10 جديدة من Ubuntu desktop البرنامج على كمبيوتر محمول قديم ، السطر الأول من الناتج wmctrl -m كان: Name: Compiz
بينما ال DESKTOP_SESSION و XDG_CURRENT_DESKTOP كانت القيم ubuntu و Unity


126
2018-01-05 07:57



للأسف هذا لا يعمل عبر ssh حتى إذا تم تمكين X11. - Sridhar-Sarnobat
@ سريدهار- Sarnobat على أوبنتو 15.04 ، على التوالي ssh -Y {host} 'wmctrl -m' يعيد بعض القيم (على سبيل المثال ، "الاسم: Compiz" ، والعديد من N / A) ، ولكن من المنطقي أن ssh سيكون لديك معلومات محدودة عن مدير النوافذ. - michael
على تشغيل ديبيان القرفة ، وهذا لا يعمل. ناتج wmctrl -m هو الاسم: Mutter (Muffin) بينما $ XDG_CURRENT_DESKTOP = X-Cinnamon - Floyd
على Xubuntu Wily ، يقوم بتشغيل Window Maker 0.95.6 - wmctrl بإعداد N / A لكافة الإدخالات. تم تعيين GDMSESSION إلى wmaker-common ولكن لم يتم تعيين XDG_CURRENT_DESKTOP على الإطلاق. - Mei
Mei ، هل لديك صانع نوافذ يعمل على أي أنظمة أخرى يمكنك مقارنتها؟ أيضا ، القيام بأي من wmctrl -d (قائمة بجميع أجهزة سطح المكتب التي تديرها نافذة مدير) أو wmctrl -l (قائمة النوافذ التي يديرها مدير النوافذ) تعمل بشكل جيد على Xubuntu Wily مع Window Maker؟ - James Waldby - jwpat7


على أنظمة Linux قمت باختبار متغيرات البيئة XDG_CURRENT_DESKTOP و GDMSESSION وحصلت على النتائج التالية.

يمكنك استخدام هذا الخط للحصول على الإخراج:

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

أوبونتو 18.04 (أوبونتو)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu

Ubuntu 18.04 (Ubuntu on Wayland)

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

أوبونتو 16.04


الوحدة (7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

أوبونتو 14.04


الوحدة تعمل مع مير

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

ملاحظة يتم أيضًا تعيين MIR_SERVER_NAME

  • MIR_SERVER_NAME=session-$NUMBER

الوحدة تعمل بدون مير

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

XFCE

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xfce

أوبونتو 12.04


KDE

  • XDG_CURRENT_DESKTOP=
  • GDMSESSION=kde-plasma

الوحدة 3D

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

الوحدة 2 د

  • 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

التوزيعات الأخرى القائمة على أوبونتو


النعناع 13 (القرفة)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=cinnamon

النعناع 16 (طبعة كدي)

  • XDG_CURRENT_DESKTOP=KDE
  • GDMSESSION=default

النعناع 17 (القرفة)

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=default

لوبونتو 12.04

  • XDG_CURRENT_DESKTOP=LXDE 
  • GDMSESSION=Lubuntu

الواسطة 14.04

  • XDG_CURRENT_DESKTOP=X-Cinnamon 
  • GDMSESSION=cinnamon

الواسطة 14.04 باستخدام سطح مكتب 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

84
2017-12-10 20:38



النعناع 13 (القرفة): XDG_CURRENT_DESKTOP = جنوم ، GDMSESSION = القرفة - rik-shaw
Lubuntu 12.04: XDG_CURRENT_DESKTOP = LXDE ، GDMSESSION = Lubuntu - rik-shaw
ماذا عن $ DESKTOP_SESSION؟ كحل النسخ الاحتياطي :) - Savvas Radevic
ماذا لو لم أستخدم GDM؟ - Robert Siemer
وعلاوة على ذلك لا يجيب على ذلك مدير النافذة أنا أستعمل! - Robert Siemer


في نوع المحطة env لرؤية كل متغيرات البيئة. البعض منهم:

XDG_CURRENT_DESKTOP - يخبرك بيئة سطح المكتب التي تستخدمها

GDMSESSION - يخبرك ما هو الخيار الذي اخترته من المرشد lightdm لتسجيل الدخول.

لاستخدامها ، انتقل إلى المحطة واكتب:

echo $XDG_CURRENT_DESKTOP

(هل سينتج مثلاً "الوحدة" إذا كنت تستخدم الوحدة)

أو

echo $GDMSESSION  

(هل سينتج على سبيل المثال "أوبونتو" إذا اخترت أوبونتو في تسجيل الدخول أو "أوبونتو 2d" إذا قمت بتحديد ذلك في تسجيل الدخول.)

لديك الآخرين إذا نظرتم إلى أقرب مخرج env مثل DESKTOP_SESSION و COMPIZ_CONFIG_PROFILE

نظرًا لأن ما تبحث عنه هو اسم ما هو مدير النوافذ قيد الاستخدام ، فإن الطريقة الوحيدة التي أرى بها كيفية الحصول على ذلك هي بالنظر في قائمة العمليات. للقيام بذلك هناك أمر يسمى pgrep ( ويكيبيديا ). قمت بما يلي للحصول على الاسم نظرًا لأن المعلمة -l تضيف معرّف العملية:

pgrep -l compiz |cut -d " " -f2 لأن العملية قيد التشغيل من قبل المستخدم نفسه ليست هناك حاجة لبادئة جزء sudo. يمكنك بعد ذلك استخدام هذا لإنشاء برنامج نصي يقوم بإجراء يستند إلى Window Manager.

للبحث عن أنواع أخرى ، فقط قم بتغيير الكلمة compiz إلى آخر مثل mutter، kwin، وما إلى ذلك


40
2017-10-26 21:57



هؤلاء فقط قل لي اسم الجلسة وبيئة سطح المكتب. مثال يقول "جنوم" وهو بيئة سطح المكتب التي يمكن أن تستخدم Metacity ، أو Mutter ، أو Compiz ، أو مديري النوافذ الآخرين. تقول "gnome-classic" وهو اسم جلسة ، لا يوجد مدير نوافذ بهذا الاسم. - Anonymous
ها أنت ذا. العثور على أمر يمكن أن يساعد في قائمة العمليات. pgrep. حصلت على هذا الجزء ، على الأقل يظهر لك اسم مدير النوافذ إذا وجدت. في محاولة للتحقق مما إذا كان يمكنني إضافة كل منهم معا هناك. سؤالك جيد جدا لأن Ubuntu 11.10 يخلط قليلا باستخدام Compiz (أو تمتم إذا كان Gnome 3.x) سيكون من الجيد أن نشير إلى مدير النوافذ الفعلي المستخدم في Unity. - Luis Alvarado♦
$XDG_CURRENT_DESKTOP هي بيئة سطح المكتب الحالية ، وليس مدير النوافذ. - Ken Sharp


وجدت 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}]

20
2018-04-22 04:59





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

8
2018-05-15 06:19



هل يمكنك شرح كيف يعمل هذا؟ أيضا ، أعتقد أنك في عداد المفقودين ) في نهايةالمطاف. - Louis Matthijssen
LouisMatthijssen 1. xprop -root -notype يعرض جميع خصائص النافذة الجذرية (وأنواع التحذيرات لتسهيل التحليل) ، يتم إرسال الإخراج إلى awk عبر الأنبوب 2. awk تعليمات $1=="_NET[blah]CK:"{print $5}' يقارن العمود الأول من كل صف من المدخلات التي حصل عليها من خلال الأنبوب مع سلسلة معينة وإذا وجد المطابقة أنها تدير الكود بين قوسين يطبعان العمود الخامس من هذا الصف - يحدث فقط (بالصدفة تماما ، أراهن) ليكون معرفًا لـ "_NET_SUPPORTING_WM_CHECK" atom ؛ 3. ثم يتم استخدام هذا المعرف مرة أخرى للحصول على خصائص Windows Manager xprop -id - cprn


لقد اختبرت أيضاً مع كيدي واستنتاجي هو:

أ) طريقة رسومية ، مع HardInfo: الجواب عادة في "نظام التشغيل"> "بيئة سطح المكتب" ، ولكن إذا لم يكن يمكنك أن تنظر إلى "متغيرات البيئة". HardInfo جاهز مع جميع التوزيعات المختبرة ، باستثناء واحدة مع KDE ، ولكن يمكن تثبيتها بسهولة وبسرعة (حزمتان فقط في Linux Mint 13).

ب) سطر الأوامر ، مع هذا الأمر: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm". يجب أن يكون العنصر الذي يظهر في سطور أكثر هو الإجابة (إذا كان هناك عنصر يجب أن يكون الحل مع "جلسة العمل" هو الحل).


3
2018-04-15 22:51



XFCE أيضا لديها عدة gnome-... العمليات (و kde ضرب مع kdevtmpfs) - Xen2050


لم يعمل أي مما سبق بالنسبة لي ، أردت فقط أن أعرف ما إذا كنت أتولى تشغيل Gnome كجلسة سطح المكتب الحالية الخاصة بي.

هذا ما نجح ، وفتح المحطة

lsb_release -a

(للتحقق من النكهة أو الإصدار الذي قمت بتثبيته على جهاز UBUNTU الخاص بي)

ls /usr/bin/*session

(يطلق أي بيئة سطح مكتب / سطح مكتب قيد الاستخدام حاليًا)

gnome-shell --version 

(لمعرفة أي إصدار من gnome مثبت)


1
2017-07-07 16:26





البرنامج النصي التالي أسفر عن أفضل إجابة لشيء مشابه السؤال الذي نشرته في unix.se. كما أنه يعمل بشكل رائع مع Unity و 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"

-1
2018-02-24 17:42





هذا النوع من الممكن مع dbus وخدمة الحسابات (سواء بشكل افتراضي في أوبونتو).

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

تجدر الإشارة إلى أني قمت باختبار ذلك من خلال تسجيل الدخول من خلال lightdm (وهي شاشة تسجيل الدخول الرسومية) ، فقد كشف عن سطح مكتب كلاسيكي مثل Blackbox ، وبالكاد يكشف عن Unity. أظن أن هذه قيمة لما يختاره المستخدم على شاشة تسجيل الدخول كجلسة ، وهذا هو السبب في أنه من الأسهل قليلاً استخدام ذلك التحقق من العمليات


-1
2018-04-03 07:54





يمكنني فقط التفكير في التحقق من مديري النوافذ المعروفين في العمليات الجارية. كان هناك مفتاح في gconf تم تعيينه لمدير النوافذ المفضل ، ولكن تم إيقافه منذ Gnome 2.12.

لذا ، إذا كان هذا لغرض البرمجة ، أقترح عليك البحث عن جميع مديري نافذة لينكس ؛ بعض الشعبية هي:

  • جنوم شل *
  • تطبيق Compiz
  • ميتاسيتي
  • تمتم
  • منشار

يجب عليك تشغيل التحقق لكل منهما باستخدام الأمر pgrep -l $WINDOW_MANAGER، أين $WINDOW_MANAGER هو اسم مدير النوافذ الذي تريد التحقق منه. ال pgrep يتحقق الأمر لعمليات التشغيل.

لست متأكدًا بنسبة 100٪ إذا تم اعتبار Gnome Shell مديرًا للنوافذ. بقية مديري النافذة التي حصلت عليها من قائمة في /usr/bin/gnome-wm النصي. في الواقع ، يجب أن يكون هذا النص قابلاً للاستخدام (بما أنه موجود حاليًا على تثبيت نظيف) ولكن في حالتي يحاول تشغيله compiz وهو ليس مدير النوافذ الافتراضي الخاص بي (ليس في جلسة Gnome الخاصة بي).

تصحيح:

يبدو أن تعليقAnarci أكثر دقة. في حالتي لم تظهر gnome-shell.


-3
2017-10-26 21:32



يبدو أن pgrep يدعم regex حتى يمكن استخدام نمط مع بدائل. pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad" - Anonymous
هذا لا يكفي: ماذا لو كان المستخدم يقوم بتشغيل عدة جلسات X مع مديرين مختلفين؟ يجب أن تتحقق على الأقل من أن مدير النافذة يعمل على الشاشة التي تهتم بها (يمكنك القيام بذلك عن طريق الفحص $DISPLAY في بيئتها). - Gilles