कैसे पता लगाएं कि भौतिक कंसोल का उपयोग कौन कर रहा है?


10

मैं उस उपयोगकर्ता का पता लगाने के लिए एक स्क्रिप्ट का उपयोग करना चाहूंगा - जो उपयोगकर्ता वर्तमान में भौतिक कंसोल पर है (जिसके पास कीबोर्ड, माउस और ग्राफिकल डिस्प्ले की कमांड है)?

मैं सिर्फ यह नहीं जानना चाहता कि कौन X चलाता है (वर्तमान कंसोल को किसी अन्य टर्मिनल और किसी अन्य उपयोगकर्ता पर स्विच किया जा सकता है)।


स्पष्ट करने के लिए:
जैसे आदेश w, whoआदि दिखाने के जो जो टर्मिनल पर लॉग होता है। यह सरल है। हालांकि, मैं जानना चाहूंगा कि वर्तमान में भौतिक कंसोल (डिस्प्ले, कीबोर्ड आदि) का मालिक कौन है। उदाहरण के लिए, यदि दो उपयोगकर्ताओं को प्रदर्शित करता है चलाने: 0 और: 1, और मैं के साथ प्रदर्शित करता है के बीच स्विच कर सकते हैं ctrl+ alt+ 7और ctrl+ alt+ 8, मुझे पता है, जिसमें उपयोगकर्ता को वर्तमान में अपने या अपने प्रदर्शन और वास्तविक, शारीरिक स्क्रीन के बीच संबंध नहीं है चाहते हैं ।


एक और स्पष्टीकरण:
मुझे अपना स्वयं का उपयोगकर्ता नाम जानने में कोई दिलचस्पी नहीं है । मेरे पास एक स्क्रिप्ट है, जो किसी अन्य उपयोगकर्ता या रूट के रूप में चल रही है, जिसे यह जानना होगा कि भौतिक प्रदर्शन का उपयोग कौन करता है । विभिन्न उपयोगकर्ताओं द्वारा चलाए जा रहे कई एक्स सत्र हो सकते हैं, उनमें से कुछ वर्चुअलाइज्ड हैं, उनमें से कुछ रिमोट एक्स सर्वर से जुड़े हैं, लेकिन मुझे केवल उसी में दिलचस्पी है जो वास्तव में मॉनिटर पर आउटपुट प्रदर्शित कर रहा है।


फिर भी एक और स्पष्टीकरण:
जो भी आदेश है, उत्पादन दबाने के बाद अलग होना चाहिए Ctrl+ Alt+ F1(एक और आभासी कंसोल का उपयोग करने जा)।


क्या यह एक स्व प्रश्नोत्तर है?
jokerdino

दुर्भाग्य से नहीं।
जनवरी

जवाबों:


6

मुझे डर है कि मैं आपको एक विशिष्ट उत्तर नहीं दे सकता (क्योंकि मैं तकनीक को अच्छी तरह से नहीं जानता), लेकिन मेरा मानना ​​है कि आप इसे डी-बस और कंसोलकिट का उपयोग करके पता लगा सकते हैं।

उदाहरण के लिए, जब मैं एक्स से वीटी और पीछे स्विच करता हूं, तो मुझे यह सुनने को मिलता है 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जो वर्तमान उपयोगकर्ता-आईडी के साथ उत्तर देता है। वहां से लाइब्रेरी फंक्शन getpwuid का यूजरनेम मिल सकता है।
जॉन एस ग्रुबर

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 निष्क्रिय समय है, जो वर्तमान में उपयोग में होने का संकेत देता है।


नहीं, यह केवल मुझे बताता है - जैसा कि आपने लिखा है - कौन किस टर्मिनल पर लॉग इन है । स्क्रिप्ट के साथ उपयोग करने के लिए, मैं यह जानना चाहूंगा कि कौन सा उपयोगकर्ता भौतिक कंसोल (कीबोर्ड, डिस्प्ले आदि) का मालिक है
जनवरी

पीएस निष्क्रिय समय भी गैर-जानकारीपूर्ण है; मैं स्क्रीनसेवर के साथ एक स्क्रिप्ट पर काम कर रहा हूं, लेकिन मैं यह जानना चाहता हूं कि कौन सा उपयोगकर्ता स्क्रीनसेवर चला रहा है जो वास्तव में प्रदर्शित है
जनवरी

TTY और 'क्या' यहां काम कर सकता है, आपको बस जरूरी बिट्स निकालने होंगे।
जर्नीमैन गीक सेप

उम, नहीं, क्योंकि यह जहां भी चल सकता है (पृष्ठभूमि में, एक अन्य एक्स सर्वर पर, एक आभासी मशीन में)
जनवरी


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.