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).

janvier
la source
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 .

nfirvine
la source
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.

Journeyman Geek
la source
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
hytromo
la source
0

Une autre commande est

whoami

Il montre le nom d'utilisateur actuel de logeed

Ketan Patel
la source