web-dev-qa-db-fra.com

Comment savoir qui utilise la console physique?

Je voudrais utiliser un script pour trouver le nom d'utilisateur - de l'utilisateur qui est actuellement sur le console physique (qui a la maîtrise 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).


à préciser:
Des commandes telles que w, who etc. indiquent qui est connecté à quel terminal. C'est simple J'aimerais toutefois savoir à qui appartient actuellement la console physique (écran, clavier, etc.). Par exemple, si deux utilisateurs exécutent les affichages: 0 et: 1, je peux basculer entre les affichages avec ctrl+alt+7 et ctrl+alt+8, J'aimerais savoir quel utilisateur a actuellement la connexion entre son affichage et son écran physique réel.


Encore une clarification:
Je ne suis pas intéressé à connaître mon propre nom d'utilisateur . J'ai un script, fonctionnant sous un autre utilisateur ou racine, qui a besoin de savoir qui utilise l'affichage physique . Plusieurs sessions X peuvent être 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 la sortie sur le moniteur.


Encore une clarification:
Quelle que soit la commande, le résultat doit être différent après avoir appuyé sur Ctrl+Alt+F1 (passage à une autre console virtuelle).

10
January

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 trouver en utilisant D-Bus et ConsoleKit.

Par exemple, quand je passe de X à un VT et retour, je reçois cette écoute sur 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 avec 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, en fonction de votre application, vous souhaiterez extraire les propriétés de l'objet renvoyé, qui doivent être un chemin d'accès à un objet Session .

5
nfirvine
[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 indiquer 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'est pas allé au système depuis 2 jours. Comparez cela à la connexion de blackbeauty, qui a un temps d'inactivité de 0.00, ce qui indique son utilisation actuelle.

5
Journeyman Geek

Il y a plusieurs façons:

  • whoami
  • w
  • echo $USER
  • logname
1
hytromo

Une autre commande est

whoami

Il montre le nom d'utilisateur actuel

0
Ketan Patel