มีคำสั่ง linux อย่างง่ายที่จะบอกฉันว่าตัวจัดการการแสดงผลของฉันคืออะไร?


58

มีคำสั่ง linux อย่างง่ายที่จะบอกฉันว่าตัวจัดการการแสดงผลของฉันคืออะไร?

ฉันใช้ Xfce สภาพแวดล้อมเดสก์ท็อปที่แตกต่างกันมักจะมีความเกี่ยวข้องกับผู้จัดการการแสดงผลที่แตกต่างกันหรือไม่?


1
Wikipedia มีบทความที่ดีเกี่ยวกับเรื่องนี้: en.wikipedia.org/wiki/X_display_manager_%28program_type%29
Let_Me_Be

คำตอบ:


45

น่าเสียดายที่การกำหนดค่าแตกต่างกันสำหรับการแจกจ่ายแต่ละรายการ:

Debian / Ubuntu

/etc/X11/default-display-manager

RedHat (ควรใช้กับ Fedora ด้วย)

/etc/sysconfig/desktop

openSUSE

/etc/sysconfig/displaymanager

1
ทำไมคุณเล่าเรื่องการกำหนดค่า ...
ptrcao

2
@ptrcao เพราะมันระบุตัวจัดการหน้าจอที่คุณใช้
Let_Me_Be

1
สมมติว่าฉันไม่รู้ว่าตัวจัดการการแสดงผลของฉันคืออะไรและฉันต้องการค้นหาโดยใช้เทอร์มินัล ฉันจะทำอย่างไร
ptrcao

3
@ptrcao คุณจะดูไฟล์เหล่านั้น catทั้งการเปิดพวกเขาในการแก้ไขของคุณชื่นชอบหรือเพียงแค่การทำ
Let_Me_Be

1
มีเพียงหนึ่งบรรทัดในนั้น: /usr/bin/xdm- นั่นหมายความว่า xdm เป็นผู้จัดการการแสดงผลของฉันหรือไม่?
ptrcao

23

ไม่มี ตัวจัดการหน้าจอไม่จำเป็นต้องเกี่ยวข้องกับสิ่งอื่นใดที่ทำงานบนเซิร์ฟเวอร์ X เดียวกัน ตัวจัดการหน้าจอทำงานก่อนที่คุณจะเข้าสู่ระบบ มันถูกเลือกโดยผู้ดูแลระบบ ทุกอย่างอื่น (ผู้จัดการหน้าต่างผู้จัดการเซสชันสภาพแวดล้อมเดสก์ท็อป ... ) ถูกเลือกโดยผู้ใช้ ไม่จำเป็นต้องเป็นเครื่องมือจัดการหน้าจอด้วยซ้ำ: หากคุณเข้าสู่ระบบในโหมดข้อความและเริ่ม GUI ด้วยจะstartxไม่มีการใช้เครื่องมือจัดการหน้าจอ

คุณสามารถตรวจสอบซึ่งผู้จัดการจอแสดงผลเป็นค่าเริ่มต้นหนึ่งในระบบของคุณ สิ่งนี้จะให้คำตอบที่ถูกต้องภายใต้สมมติฐานทั่วไปบางข้อ แต่ไม่ใช่ข้อสมมติฐานสากล หากคุณใช้ผู้จัดการคนอื่นด้วยตนเองไม่ว่าด้วยเหตุผลใดวิธีนี้จะไม่บอกคุณ

ทางออกที่ดีคือการหารหัสกระบวนการของเซิร์ฟเวอร์ X: กระบวนการหลักอาจเป็นเครื่องมือจัดการการแสดงผลหากมี สิ่งนี้ต้องการให้ลูกค้าของคุณกำลังทำงานบนเครื่องเดียวกันกับเซิร์ฟเวอร์ X lsof /tmp/.X11-unix/X${DISPLAY#:}จะแสดงกระบวนการเซิร์ฟเวอร์ X (สมมติว่าซ็อกเก็ต X อยู่/tmp/.X11-unix)

x=$(lsof -F '' /tmp/.X11-unix/X0); x=${x#p}
ps -p $(ps -o ppid -p $x)

(คำอธิบาย: lsof -F ''พิมพ์เอาท์พุทเช่นp1234ได้. -Fตัวเลือกหมายความว่ารูปแบบการส่งออกเครื่อง parseable และ''หมายถึงเพียงพิมพ์แบบ PID ด้วยตัวอักษรpก่อนที่มันจะ. x=${x#p}ถอดอักษรตัวแรกpบรรทัดสุดท้ายได้รับหมายเลขผลิตภัณฑ์ของแม่ของเซิร์ฟเวอร์เอ็กซ์ได้. ( ps -o ppid -p $x) และโทรpsเพื่อแสดงข้อมูลเกี่ยวกับกระบวนการหลักนั้น)

การแจกแจงบางอย่างอนุญาตให้ติดตั้งตัวจัดการการแสดงผลหลายตัว จะมีเพียงหนึ่งเดียวที่ทำงานยกเว้นว่าคุณมีระบบมัลติซีตว่า ในการแสดงรายการแพ็คเกจเครื่องมือจัดการหน้าจอที่ติดตั้งทั้งหมดภายใต้ Debian และอนุพันธ์:

aptitude -F %p search '~i ~P^x-display-manager$'

หรือ

</var/lib/dpkg/status awk '
    /^Package: / {package = $2}
    /^Provides: .*x-display-manager/ {print package}'

17

หากคุณใช้การกระจายตามsystemd คำสั่งนี้จะให้ชื่อของตัวจัดการการแสดงผลที่กำหนดค่าไว้ในปัจจุบันเนื่องจากคุณอาจติดตั้งตัวจัดการจอแสดงผลมากกว่าหนึ่งตัว

grep '/usr/s\?bin' /etc/systemd/system/display-manager.service

ผลลัพธ์จะเป็นอย่างไร

ExecStart=/usr/bin/mdm

ดูเหมือนว่าฉันกำลังใช้ตัวจัดการการแสดงผลมิ้น


3
คุณได้นำเสนอตัวอย่างคลาสสิกของการใช้ประโยชน์ของแมว - grep '/usr/bin' /etc/systemd/system/display-manager.serviceเป็นที่ยอมรับอย่างสมบูรณ์และยังดีกว่าที่จะบอกว่า (และพูดอย่างเคร่งครัดเนื่องจาก/usr/binไม่มีอักขระใด ๆ ที่พิเศษสำหรับเชลล์คุณไม่จำเป็นต้องพูดถึงมัน - แต่มันไม่เจ็บเลย)
G-Man

6
'การใช้แมวที่ไร้ประโยชน์' นั้นค่อนข้างสัมพันธ์กันเสมอ ฉันต้องการแก้ไขสตริงสุดท้ายcat <file> | grep <searchterm>แทนที่จะเป็นสตริงที่สองgrep <searchterm> <file>เมื่อ grepping
sjas

1
คำตอบนี้ควรเป็นคำตอบแรกที่คุณเห็นเนื่องจากผู้ใช้ส่วนใหญ่ที่มีคำถามประเภทนี้ในวันนี้กำลังเรียกใช้ distros ตาม systemd ขอบคุณ มันช่วยฉัน
Adergaard

3
@ ทั้งหมดของไฟล์ของฉันไม่มี / usr / bin มันมี / usr / sbin Linux-Mint 18
Prvt_Yadav

2
ในกรณีของฉัน (Centos 7) ฉันต้องเขียน | grep '/ usr / sbin'
Davide

15

หากคุณใช้ systemd อยู่

systemctl status display-manager

จะแสดงชื่อและสถานะของบริการเครื่องมือจัดการหน้าจอที่ใช้งานอยู่ในเครื่องของคุณ


ด้วย Debian 9 นี่เป็นสิ่งเดียวที่ทำงานได้สำหรับฉัน เมธอด systemd อื่นไม่ส่งคืนอะไรเลย
mickeyf

10

ชื่อเครื่องมือจัดการจอแสดงผลควรอยู่ใน DESKTOP_SESSION

echo $DESKTOP_SESSION

ส่งคืน "gnome" สำหรับฉัน

แก้ไข
คุณพูดถูก พวกมันจะกลับไปกลับมาใน XFCEs bugzillaดังนั้นมันจึงไม่น่าเชื่อถือ


@frabjous: แล้ว gdm และ kdm ล่ะ? พวกเขาแสดงผู้จัดการด้วยหรือเพียงแค่เข้าสู่ระบบผู้จัดการ?
ptrcao

ฉันต้องลบความคิดเห็นของ frabjous โดยบังเอิญเพราะฉันจำได้ว่าเขาตั้งข้อสังเกตว่า Gnome เป็นระบบเดสก์ท็อปไม่ใช่เครื่องมือจัดการการแสดงผล หัวข้อนี้เต็มไปด้วยความสับสน ...
ptrcao

สิ่งนี้ให้ข้อมูลเกี่ยวกับ ... เซสชันเดสก์ท็อปซึ่งน่าจะเป็นสิ่งเดียวกันกับสภาพแวดล้อมเดสก์ท็อปของคุณ แต่อาจเป็นอย่างอื่นถ้าคุณไม่ได้ใช้สภาพแวดล้อมเดสก์ท็อปหรือคุณมีการกำหนดค่าที่แปลกประหลาด บนเครื่องที่ผมเขียนนี้คือ$DESKTOP_SESSION unknown
Gilles

+1, echo $ DESKTOP_SESSION ก็ส่ง gnome กลับมาให้ฉันด้วย ... แต่บางทีนี่อาจใช้กับ gnome ได้เท่านั้น?
เทรเวอร์บอยด์สมิ ธ

ถ้ามันใช้งานได้กับคำพังเพยเท่านั้นคำสั่งนี้จะช่วยคุณอนุมาน "ใช่คุณมี Gnome หรือไม่คุณไม่มีคำพังเพย" เมื่อคำถามต้องการค้นหามากกว่านั้น
เทรเวอร์บอยด์สมิ ธ

2

เช่นเดียวกับ @Gilles พูดผู้จัดการการแสดงผลจะเริ่มสภาพแวดล้อมเดสก์ทอปของคุณ

ตามที่เดวิกิพีเดียส่วนใหญ่สิ้นสุดเหล่านี้ด้วยเท่านั้นยกเว้นdmslim

ดังนั้นสิ่งนี้จึงเพียงพอสำหรับความต้องการส่วนใหญ่ของผู้คน:

ps auxf | awk '{print $11}' | \grep --color -e dm$ -e slim$

หรือเพื่อให้แน่ใจว่ามันมีอยู่เป็นกระบวนการหลักและไม่แยก (ยกเว้นจากระบบ init):

ps auxf | awk '{print $11}' | \grep -e "^/.*dm$" -e "/.*slim$" 

1
นี่เป็นทางออกเดียวที่ได้ผลสำหรับฉัน คิดว่า Fedora 23 ขั้นต่ำของฉันกับโปรแกรมเสริม LXDE (ไม่ใช่ LXDE Spin) กำลังทำงานlightdmอยู่ โซลูชัน RedHat / Fedora จากคำตอบยอดนิยมไม่ทำงานดูเหมือนว่าการกำหนดค่าจะย้ายไปแล้ว
Daniel Saner

0

ในบางกรณี wmctrl สามารถช่วยได้ ยูทิลิตี้นี้เข้ากันได้กับตัวจัดการ windows จำนวนมาก

wmcrt -m 

ควรแสดงชื่อของตัวจัดการหน้าต่างที่ใช้อยู่ในปัจจุบัน


6
จัดการหน้าต่างที่ไม่ได้เป็นสิ่งเดียวกับผู้จัดการการแสดงผล
HalosGhost

0

ดังที่ได้กล่าวไปแล้วมีความสับสนมากมายในหัวข้อนี้ คำถามเดิมคือเครื่องมือจัดการหน้าจอใดไม่ใช่ตัวจัดการเดสก์ท็อปหรือตัวจัดการหน้าต่าง ฉันกำลังใช้ Xfwm4 ซึ่งเป็นตัวจัดการหน้าต่าง Xfce และ lxdm ซึ่งเป็นตัวจัดการการแสดงผล X11 ที่มีน้ำหนักเบา (จาก LXDE ไม่ใช่ Xfce) คุณควรเห็นว่าเครื่องมือจัดการดิสเพลย์ที่คุณใช้ผ่าน htop คืออะไร คุณอาจค้นพบคำตอบในช่วง 4 ปีที่ผ่านมานานแล้ว :)


อันที่จริงไม่เคยทำ ... ในความเป็นจริงยอมแพ้บน Linux โดยสิ้นเชิงและเดินไปที่ด้านมืด: D
ptrcao

0

คุณสามารถทำได้ผ่านสคริปต์ของบุคคลที่สามชื่อscreenfetch

Screenfetch เป็นสคริปต์ทุบตีที่มีอยู่สำหรับ Linux ที่แสดงข้อมูลระบบพร้อมกับโลโก้ ASCII รุ่นแจกจ่าย Linux ของระบบ

ติดตั้งผ่านตัวจัดการแพคเกจ sudo apt-get install screenfetch(สมมติว่าคุณอยู่ในรุ่น Debian)

และเพียงแค่เรียกใช้ screenfetch ใน terminal ของคุณ

ลิงค์โครงการ https://github.com/KittyKatt/screenFetch


-1

X เป็นมอดุลาร์สูงดังนั้นหากคุณต้องการจริงๆใช่คุณสามารถผสมสภาพแวดล้อมเดสก์ท็อปและผู้จัดการหน้าต่าง หลังจากตัวจัดการหน้าต่างทั้งหมดเป็นเพียงวิธีทาสีหน้าต่าง (นั่นคือมุมมองแบบง่าย ๆ )

ดังนั้นถ้าคุณใช้คำพังเพยความเคยชินเคยเป็นผู้จัดการ windows แต่ตอนนี้มันถูกแทนที่ด้วย Mutter

ปัญหาเกี่ยวกับการมิกซ์อยู่ในสภาพแวดล้อมเดสก์ท็อปที่ทันสมัยเดสก์ท็อปและตัวจัดการหน้าต่างเชื่อมโยงกันอย่างสูง การมิกซ์มากเกินไปอาจทำให้การทำงานน้อยลง

ตามที่ได้กล่าวไว้ $ DESKTOP_SESSION ใช้งานได้ แต่หากคุณต้องการถามเซิร์ฟเวอร์ X11 ของคุณคุณสามารถทำได้ดังนี้:

xprop -id $(xprop -root _NET_SUPPORTING_WM_CHECK | cut -d\# -f2) WM_NAME

ซึ่งสลายตัวไป

xprop -root _NET_SUPPORTING_WM_CHECK | cut -d\# -f2
0x1000052
xprop -id 0x1000052 WM_NAME
WM_NAME(STRING) = "xfwm4"

ซึ่งได้รับรหัสของหน้าต่างที่สร้างโดยตัวจัดการหน้าต่าง รายละเอียดบอกว่า (http://standards.freedesktop.org/wm-spec/1.3/ar01s03.html):

_NET_SUPPORTING_WM_CHECK, WINDOW/32
The Window Manager MUST set this property on the root window to be the ID
of a child window created by himself, to indicate that a compliant window
manager is active.

จากนั้นคุณขอคุณสมบัติ WM_NAME ของหน้าต่างดังกล่าว

กำลัง WM_NAME:

The WM_NAME property is an uninterpreted string that the client wants the
window manager to display in association with the window (for example, in
a window headline bar). 

@frabjous: Xfwm4 เป็นตัวจัดการหน้าต่าง Xfce เป็นเช่นเดียวกับตัวจัดการการแสดงผลหรือไม่
ptrcao

@Mathieu คุณกำลังพูดถึงผู้จัดการหน้าต่างไม่ใช่ผู้จัดการแสดงผล
Let_Me_Be

@Let_Me_Be จริง แต่ส่วนใหญ่แล้วตัวจัดการหน้าต่างของคุณจะเชื่อมโยงกับเครื่องมือจัดการการแสดงผล ... คุณใช้ตัวจัดการหน้าต่าง gnome บ่อยแค่ไหนด้วย kde และในทางกลับกัน? และมันใช้งานได้จริงเพราะ gdm / kdm / อะไรก็ตามที่อนุญาตให้คุณเลือกตัวจัดการการแสดงผลซึ่งหมายความว่าการอ่านไฟล์การตั้งค่าอย่างที่คุณพูดถึงจะไม่ทำงานหากคุณไม่ได้ใช้ค่าเริ่มต้นที่ให้ไว้ ...
Mathieu

_NET_SUPPORTING_WM_CHECKให้ข้อมูลเกี่ยวกับตัวจัดการหน้าต่างไม่ใช่เกี่ยวกับตัวจัดการการแสดงผล มันไม่ได้ทำงานเสมอ ในระบบของฉันคุณสมบัตินั้นถูกตั้งค่าเป็น ID หน้าต่าง แต่หน้าต่างที่เป็นปัญหานั้นไม่มีชื่อ
Gilles

@Mathieu ขึ้นอยู่กับการแจกแจง โดยปกติเมื่อคุณติดตั้ง distro เวอร์ชั่น KDE คุณจะได้รับ KDM และเมื่อเป็น gnome version คุณจะได้รับ GDM แต่สิ่งที่คุณจะเห็นมากขึ้นคือการสนับสนุนอย่างเป็นทางการสำหรับผู้จัดการการแสดงผลเพียงคนเดียว (โดยทั่วไปจะเป็นตัวแปรที่มีน้ำหนักเบามากกว่า GDM / KDM)
Let_Me_Be

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.