Comment savoir qui utilise la console physique?


10

Je voudrais utiliser un script pour trouver le nom d'utilisateur - de l'utilisateur qui est actuellement sur la console physique (qui a la commande du clavier, de la souris et de l'affichage graphique)?

Je ne veux pas seulement savoir qui exécute X (car la console actuelle peut être commutée sur un autre terminal et un autre utilisateur).


Pour clarifier: les
commandes comme w, whoetc. montrent qui est connecté à quel terminal. C’est simple. J'aimerais cependant savoir à qui appartient actuellement la console physique (écran, clavier, etc.). Par exemple, si deux utilisateurs exécutent des affichages: 0 et: 1, et que je peux basculer entre les affichages avec ctrl+ alt+ 7et ctrl+ alt+ 8, je voudrais savoir quel utilisateur a actuellement la connexion entre son affichage et l'écran physique réel .


Une autre précision:
je ne suis pas intéressé à connaître mon propre nom d'utilisateur. J'ai un script, exécuté en tant qu'un autre utilisateur ou root, qui doit savoir qui utilise l' affichage physique . Il peut y avoir plusieurs sessions X exécutées par différents utilisateurs, certaines virtualisées, certaines connectées à un serveur X distant, mais je ne suis intéressé que par celle qui affiche réellement la sortie sur le moniteur.


Encore une autre précision:
quelle que soit la commande, la sortie doit être différente après avoir appuyé sur Ctrl+ Alt+ F1(basculement vers une autre console virtuelle).


S'agit-il d'un auto Q&A?
jokerdino

Non malheureusement.
Janvier

Réponses:


6

J'ai bien peur de ne pas pouvoir vous donner de réponse précise (car je ne connais pas bien la technologie), mais je pense que vous pouvez le découvrir en utilisant D-Bus et ConsoleKit.

Par exemple, lorsque je passe de X à un VT et vice-versa, j'obtiens cette écoute 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"

Plus précisément, vous pouvez utiliser la méthode GetActiveSession . Voici comment dbus-send(peut nécessiter sudo):

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

Ensuite, selon votre application, vous voudrez vérifier les propriétés de l'objet renvoyé, qui devraient être un chemin d'objet vers une session .


3
Très utile, je pense. Lorsque je change de session, la réponse change en conséquence. En particulier, je pourrais alors entrer la commande suivante: dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Session2 org.freedesktop.ConsoleKit.Session.GetUserqui répond avec l'ID utilisateur actuel. De là, la fonction de bibliothèque getpwuid peut obtenir le nom d'utilisateur.
John S Gruber

1
C'est certainement la réponse que je cherchais. Merci beaucoup!
janvier

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

Vous pouvez utiliser la commande w pour voir qui est connecté. Le temps d'inactivité et ce qui devrait vous dire ce qui est en cours d'exécution - dans ce cas, gdm indique une connexion active et le temps d'inactivité indique que l'utilisateur n'a pas été sur le système depuis 2 jours. Comparez cela avec la connexion de blackbeauty, qui a un temps d'inactivité de 0,00, ce qui indique qu'elle est actuellement utilisée.


Non, cela me dit seulement - comme vous l'avez écrit - qui est connecté à quel terminal . Pour utiliser un script, je voudrais savoir quel utilisateur est propriétaire de la console physique (clavier, écran , etc.)
Janvier

Le temps d'inactivité PS est également non informatif; Je travaille sur un script jouant avec un économiseur d'écran, mais je veux savoir quel utilisateur exécute l'économiseur d'écran qui est réellement affiché .
Janvier

le TTY et «quoi» pourrait fonctionner ici, il vous suffirait d'extraire les bits nécessaires.
Journeyman Geek

Euh, non, car il peut fonctionner chaque fois (en arrière - plan, sur un autre serveur X, dans une machine virtuelle)
Janvier

1

Il y a plusieurs façons:

  • whoami
  • w
  • echo $USER
  • logname

0

Une autre commande est

whoami

Il montre le nom d'utilisateur actuel de logeed

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.