มีคำสั่ง linux อย่างง่ายที่จะบอกฉันว่าตัวจัดการการแสดงผลของฉันคืออะไร?
ฉันใช้ Xfce สภาพแวดล้อมเดสก์ท็อปที่แตกต่างกันมักจะมีความเกี่ยวข้องกับผู้จัดการการแสดงผลที่แตกต่างกันหรือไม่?
มีคำสั่ง linux อย่างง่ายที่จะบอกฉันว่าตัวจัดการการแสดงผลของฉันคืออะไร?
ฉันใช้ Xfce สภาพแวดล้อมเดสก์ท็อปที่แตกต่างกันมักจะมีความเกี่ยวข้องกับผู้จัดการการแสดงผลที่แตกต่างกันหรือไม่?
คำตอบ:
น่าเสียดายที่การกำหนดค่าแตกต่างกันสำหรับการแจกจ่ายแต่ละรายการ:
Debian / Ubuntu
/etc/X11/default-display-manager
RedHat (ควรใช้กับ Fedora ด้วย)
/etc/sysconfig/desktop
openSUSE
/etc/sysconfig/displaymanager
cat
ทั้งการเปิดพวกเขาในการแก้ไขของคุณชื่นชอบหรือเพียงแค่การทำ
/usr/bin/xdm
- นั่นหมายความว่า xdm เป็นผู้จัดการการแสดงผลของฉันหรือไม่?
ไม่มี ตัวจัดการหน้าจอไม่จำเป็นต้องเกี่ยวข้องกับสิ่งอื่นใดที่ทำงานบนเซิร์ฟเวอร์ 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}'
หากคุณใช้การกระจายตามsystemd คำสั่งนี้จะให้ชื่อของตัวจัดการการแสดงผลที่กำหนดค่าไว้ในปัจจุบันเนื่องจากคุณอาจติดตั้งตัวจัดการจอแสดงผลมากกว่าหนึ่งตัว
grep '/usr/s\?bin' /etc/systemd/system/display-manager.service
ผลลัพธ์จะเป็นอย่างไร
ExecStart=/usr/bin/mdm
ดูเหมือนว่าฉันกำลังใช้ตัวจัดการการแสดงผลมิ้น
grep '/usr/bin' /etc/systemd/system/display-manager.service
เป็นที่ยอมรับอย่างสมบูรณ์และยังดีกว่าที่จะบอกว่า (และพูดอย่างเคร่งครัดเนื่องจาก/usr/bin
ไม่มีอักขระใด ๆ ที่พิเศษสำหรับเชลล์คุณไม่จำเป็นต้องพูดถึงมัน - แต่มันไม่เจ็บเลย)
cat <file> | grep <searchterm>
แทนที่จะเป็นสตริงที่สองgrep <searchterm> <file>
เมื่อ grepping
หากคุณใช้ systemd อยู่
systemctl status display-manager
จะแสดงชื่อและสถานะของบริการเครื่องมือจัดการหน้าจอที่ใช้งานอยู่ในเครื่องของคุณ
ชื่อเครื่องมือจัดการจอแสดงผลควรอยู่ใน DESKTOP_SESSION
echo $DESKTOP_SESSION
ส่งคืน "gnome" สำหรับฉัน
แก้ไข
คุณพูดถูก พวกมันจะกลับไปกลับมาใน XFCEs bugzillaดังนั้นมันจึงไม่น่าเชื่อถือ
$DESKTOP_SESSION
unknown
เช่นเดียวกับ @Gilles พูดผู้จัดการการแสดงผลจะเริ่มสภาพแวดล้อมเดสก์ทอปของคุณ
ตามที่เดวิกิพีเดียส่วนใหญ่สิ้นสุดเหล่านี้ด้วยเท่านั้นยกเว้นdm
slim
ดังนั้นสิ่งนี้จึงเพียงพอสำหรับความต้องการส่วนใหญ่ของผู้คน:
ps auxf | awk '{print $11}' | \grep --color -e dm$ -e slim$
หรือเพื่อให้แน่ใจว่ามันมีอยู่เป็นกระบวนการหลักและไม่แยก (ยกเว้นจากระบบ init):
ps auxf | awk '{print $11}' | \grep -e "^/.*dm$" -e "/.*slim$"
lightdm
อยู่ โซลูชัน RedHat / Fedora จากคำตอบยอดนิยมไม่ทำงานดูเหมือนว่าการกำหนดค่าจะย้ายไปแล้ว
ในบางกรณี wmctrl สามารถช่วยได้ ยูทิลิตี้นี้เข้ากันได้กับตัวจัดการ windows จำนวนมาก
wmcrt -m
ควรแสดงชื่อของตัวจัดการหน้าต่างที่ใช้อยู่ในปัจจุบัน
ดังที่ได้กล่าวไปแล้วมีความสับสนมากมายในหัวข้อนี้ คำถามเดิมคือเครื่องมือจัดการหน้าจอใดไม่ใช่ตัวจัดการเดสก์ท็อปหรือตัวจัดการหน้าต่าง ฉันกำลังใช้ Xfwm4 ซึ่งเป็นตัวจัดการหน้าต่าง Xfce และ lxdm ซึ่งเป็นตัวจัดการการแสดงผล X11 ที่มีน้ำหนักเบา (จาก LXDE ไม่ใช่ Xfce) คุณควรเห็นว่าเครื่องมือจัดการดิสเพลย์ที่คุณใช้ผ่าน htop คืออะไร คุณอาจค้นพบคำตอบในช่วง 4 ปีที่ผ่านมานานแล้ว :)
คุณสามารถทำได้ผ่านสคริปต์ของบุคคลที่สามชื่อscreenfetch
Screenfetch เป็นสคริปต์ทุบตีที่มีอยู่สำหรับ Linux ที่แสดงข้อมูลระบบพร้อมกับโลโก้ ASCII รุ่นแจกจ่าย Linux ของระบบ
ติดตั้งผ่านตัวจัดการแพคเกจ
sudo apt-get install screenfetch
(สมมติว่าคุณอยู่ในรุ่น Debian)
และเพียงแค่เรียกใช้
screenfetch
ใน terminal ของคุณ
ลิงค์โครงการ https://github.com/KittyKatt/screenFetch
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).
_NET_SUPPORTING_WM_CHECK
ให้ข้อมูลเกี่ยวกับตัวจัดการหน้าต่างไม่ใช่เกี่ยวกับตัวจัดการการแสดงผล มันไม่ได้ทำงานเสมอ ในระบบของฉันคุณสมบัตินั้นถูกตั้งค่าเป็น ID หน้าต่าง แต่หน้าต่างที่เป็นปัญหานั้นไม่มีชื่อ