จะทราบได้อย่างไรว่าใครกำลังใช้ฟิสิคัลคอนโซล


10

ฉันต้องการใช้สคริปต์เพื่อค้นหาชื่อผู้ใช้ - ของผู้ใช้ที่อยู่ในฟิสิคัลคอนโซล (ผู้ที่มีคำสั่งของแป้นพิมพ์เมาส์และจอแสดงผลกราฟิก)?

ฉันไม่ต้องการรู้ว่าใครรัน X (เนื่องจากคอนโซลปัจจุบันสามารถเปลี่ยนเป็นเทอร์มินัลอื่นและผู้ใช้รายอื่น)


ชี้แจง:
คำสั่งเช่นw, whoฯลฯ แสดงที่ถูกบันทึกไว้ที่สถานี มันง่ายมาก ฉันต้องการทราบว่าใครเป็นเจ้าของคอนโซลปัจจุบัน (จอแสดงผลแป้นพิมพ์ ฯลฯ ) ตัวอย่างเช่นหากผู้ใช้สองคนเรียกใช้การแสดง: 0 และ: 1 และฉันสามารถสลับระหว่างการแสดงผลด้วยctrl+ alt+ 7และctrl+ alt+ 8ฉันต้องการที่จะรู้ว่าผู้ใช้คนใดที่มีการเชื่อมต่อระหว่างการแสดงผลของเขาหรือเธอ .


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


คำอธิบายอื่น ๆ :
ไม่ว่าคำสั่งจะเป็นอะไรเอาต์พุตจะต้องแตกต่างหลังจากกดCtrl+ Alt+ F1(เปลี่ยนเป็นคอนโซลเสมือนอื่น)


นี่คือคำถาม & ถามตัวเอง?
jokerdino

ไม่น่าเสียดาย
มกราคม

คำตอบ:


6

ฉันเกรงว่าฉันไม่สามารถให้คำตอบที่เฉพาะเจาะจงแก่คุณ (เพราะฉันไม่รู้จักเทคโนโลยีดี) แต่ฉันเชื่อว่าคุณสามารถค้นพบได้โดยใช้ D-Bus และ ConsoleKit

ตัวอย่างเช่นเมื่อฉันเปลี่ยนจาก X เป็น VT และย้อนกลับฉันจะรับฟังสิ่งนี้dbus-monitor:

$ dbus-monitor --system | grep ConsoleKit
signal sender=:1.16 -> dest=(null destination) serial=19039 path=/org/freedesktop/ConsoleKit/Session2; interface=org.freedesktop.ConsoleKit.Session; member=ActiveChanged
signal sender=:1.16 -> dest=(null destination) serial=19040 path=/org/freedesktop/ConsoleKit/Seat1; interface=org.freedesktop.ConsoleKit.Seat; member=ActiveSessionChanged
signal sender=:1.16 -> dest=(null destination) serial=19041 path=/org/freedesktop/ConsoleKit/Session2; interface=org.freedesktop.ConsoleKit.Session; member=ActiveChanged
signal sender=:1.16 -> dest=(null destination) serial=19042 path=/org/freedesktop/ConsoleKit/Seat1; interface=org.freedesktop.ConsoleKit.Seat; member=ActiveSessionChanged
   string "/org/freedesktop/ConsoleKit/Session2"

โดยเฉพาะคุณสามารถใช้วิธีGetActiveSession นี่คือวิธีที่มีdbus-send(อาจต้องการsudo):

$ dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Seat1 org.freedesktop.ConsoleKit.Seat.GetActiveSession

จากนั้นก็ขึ้นอยู่กับโปรแกรมของคุณคุณจะต้องการที่จะตรวจสอบคุณสมบัติของวัตถุกลับซึ่งควรจะเป็นเส้นทางวัตถุไปยังเซสชัน


3
มีประโยชน์มากฉันคิดว่า เมื่อฉันสลับเซสชันการตอบกลับจะสลับไปตามลำดับ โดยเฉพาะฉันสามารถป้อนคำสั่งต่อไปนี้: dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Session2 org.freedesktop.ConsoleKit.Session.GetUserซึ่งตอบกลับด้วย ID ผู้ใช้ปัจจุบัน จากนั้นฟังก์ชั่นห้องสมุด getpwuid สามารถรับชื่อผู้ใช้
John S Gruber

1
นี่เป็นคำตอบที่ฉันต้องการอย่างแน่นอน ขอบคุณมาก!
มกราคม

5
[geek@atremis ~]$ w

 20:02:02 up 2 days,  8:37,  3 users,  load average: 0.00, 0.01, 0.00

USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT

geek     tty1     :0               Thu11    2days 35.11s  0.18s pam: gdm-passwo

geek     pts/0    athena           Fri22   21:04m  0.03s  0.03s -bash

geek     pts/1    blackbeauty      20:02    0.00s  0.14s  0.10s w

[geek@atremis ~]$

คุณสามารถใช้คำสั่ง w เพื่อดูว่าใครเข้าสู่ระบบ เวลาว่างและสิ่งที่ควรบอกคุณว่ากำลังทำงานอะไร - ในกรณีนี้ gdm ระบุว่ามีการเข้าสู่ระบบที่ใช้งานและเวลาว่างบ่งชี้ว่าผู้ใช้ไม่ได้อยู่ที่ระบบใน 2 วัน ตัดกันสิ่งนี้ด้วยการเข้าสู่ระบบจาก blackbeauty ซึ่งมีเวลาว่าง 0.00 ซึ่งบ่งชี้ว่ามีการใช้งานอยู่ในปัจจุบัน


ไม่สิ่งนี้บอกฉันเท่านั้น - ตามที่คุณเขียน - ใครเป็นผู้ลงชื่อเข้าใช้ที่เทอร์มินัลใด ที่จะใช้กับสคริปต์ผมอยากจะทราบว่าผู้ใช้จะได้เป็นเจ้าของคอนโซล (แป้นพิมพ์แสดง ฯลฯ )
มกราคม

เวลา PS ที่ไม่ได้ทำงานยังไม่มีข้อมูล ผมทำงานในสคริปต์เล่นซอกับหน้าจอ แต่ฉันต้องการที่จะทราบว่าผู้ใช้กำลังทำงานอยู่หน้าจอที่แสดงจริง
มกราคม

TTY และ 'สิ่ง' อาจทำงานที่นี่คุณเพียงแค่ต้องแยกบิตที่จำเป็น
Geek

อืม, ไม่เพราะมันสามารถทำงานได้ทุกที่ (ในพื้นหลัง, บนเซิร์ฟเวอร์ X อื่น, ในเครื่องเสมือน)
วันที่


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