Fiziksel konsolu kimin kullandığını nasıl öğrenebilirim?


10

Ben şu anda fiziksel konsolda (klavyenin, farenin ve grafik ekranın komutu olan) kullanıcının kullanıcı adını bulmak için bir komut dosyası kullanmak ister misiniz ?

Sadece X'i kimin çalıştıracağını bilmek istemiyorum (mevcut konsol başka bir terminale ve başka bir kullanıcıya geçebilir).


Netleştirmek için:
gibi Komutları w, whovb terminali hangi oturum kim göstermektedir. Bu basit. Ancak, şu anda fiziksel konsolu (ekran, klavye vb.) Kimin olduğunu bilmek istiyorum. Örneğin, iki kullanıcı şu görüntüleri çalıştırırsa: 0 ve: 1 ve ctrl+ alt+ 7ve ctrl+ alt+ ile ekranlar arasında geçiş yapabilirsem, 8şu anda hangi kullanıcının ekranı ile gerçek, fiziksel ekran arasında bağlantıya sahip olduğunu bilmek istiyorum. .


Bir açıklama daha: Kendi kullanıcı adımı
bilmek istemiyorum . Fiziksel ekranı kimin kullanacağını bilmesi gereken başka bir kullanıcı veya kök olarak çalışan bir komut dosyası var . Bazıları sanallaştırılmış, bazıları uzak bir X sunucusuna bağlı olan farklı kullanıcılar tarafından çalışan birkaç X oturumu olabilir, ancak yalnızca monitörde gerçekten görüntülenen oturumla ilgileniyorum.


Yine başka bir açıklama:
Komut ne olursa olsun, Ctrl+ Alt+ F1(başka bir sanal konsola geçtikten) sonra çıkış farklı olmalıdır .


Bu kendi kendine soru-cevap mı?
jokerdino

Hayır, maalesef.
Ocak

Yanıtlar:


6

Korkarım sana belirli bir cevap veremiyorum (çünkü teknolojiyi iyi bilmiyorum), ancak inanıyorum ki D-Bus ve ConsoleKit kullanarak bulabilirsin.

Örneğin, X'ten VT'ye ve geri döndüğümde, şu dinlemeyi alıyorum 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"

Özellikle, GetActiveSession yöntemini kullanabilirsiniz . Aşağıdakiler nasıl yapılır dbus-send(gerekli olabilir sudo):

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

Ardından, uygulamanıza bağlı olarak, döndürülen nesnenin bir Oturuma giden bir nesne yolu olması gereken özelliklerini kontrol etmek istersiniz .


3
Çok faydalı, sanırım. Oturumları değiştirdiğimde cevap buna göre değişir. Özellikle daha sonra şu komutu girebilirim: dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Session2 org.freedesktop.ConsoleKit.Session.GetUsergeçerli kullanıcı kimliği ile yanıtlar. Oradan getpwuid kütüphane fonksiyonu kullanıcı adını alabilir.
John S Gruber

1
Bu kesinlikle aradığım cevap. Çok teşekkür ederim!
Ocak

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 ~]$

Kimin oturum açtığını görmek için w komutunu kullanabilirsiniz. Boşta kalma süresi ve ne çalıştırıldığını size bildirmesi gerekir - bu durumda gdm etkin bir oturum açmayı belirtir ve boşta kalma süresi kullanıcının 2 gün içinde sistemde olmadığını gösterir. Bunu 0,00 boşta kalma süresi olan ve şu anda kullanımda olduğunu gösteren blackbeauty girişiyle karşılaştırın.


Hayır, bu sadece bana - yazdığınız gibi - hangi terminalde oturum açtığını söyler . Bir komut dosyası ile kullanmak için, ben (gösterilecek, klavyeyi vs.) fiziksel konsolu sahibi olan kullanıcı öğrenmek istiyorum
Ocak

PS boşta kalma süresi de bilgilendirici değildir; Bir ekran koruyucu ile uğraşan bir komut dosyası üzerinde çalışıyorum, ancak aslında görüntülenen ekran koruyucusunu hangi kullanıcının çalıştırdığını bilmek istiyorum .
Ocak

TTY ve 'ne' burada işe yarayabilirse, sadece gerekli bitleri çıkarmanız gerekir.
Journeyman Geek

Yok, (bir sanal makine, arka planda başka X sunucusu) her yerde çalışabilir çünkü
Ocak


0

Başka bir komut

whoami

Geçerli logeed kullanıcı adını gösterir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.