Chciałbym użyć skryptu, aby znaleźć nazwę użytkownika - użytkownika, który aktualnie znajduje się na fizycznej konsoli (kto ma klawiaturę, mysz i wyświetlacz graficzny)?
Nie chcę tylko wiedzieć, kto uruchamia X (ponieważ bieżącą konsolę można przełączyć na inny terminal i innego użytkownika).
Aby wyjaśnić:
polecenia jak w
, who
itd pokazać, kto jest zalogowany na którym terminalu. To jest proste. Chciałbym jednak wiedzieć, kto jest obecnie właścicielem fizycznej konsoli (wyświetlacza, klawiatury itp.). Na przykład, jeśli dwóch użytkowników uruchamia ekrany: 0 i: 1 i mogę przełączać się między ekranami za pomocą ctrl+ alt+ 7i ctrl+ alt+ 8, chciałbym wiedzieć, który użytkownik ma obecnie połączenie między jego wyświetlaczem a rzeczywistym, fizycznym ekranem .
Jeszcze jedno wyjaśnienie:
nie jestem zainteresowany znajomością mojej nazwy użytkownika. Mam skrypt działający jako inny użytkownik lub root, który musi wiedzieć, kto korzysta z fizycznego wyświetlacza. Różni użytkownicy mogą prowadzić kilka sesji X, niektóre zwirtualizowane, niektóre podłączone do zdalnego serwera X, ale interesuje mnie tylko ta, która faktycznie wyświetla dane wyjściowe na monitorze.
Jeszcze jedno wyjaśnienie:
Niezależnie od polecenia, wyjście musi być inne po naciśnięciu Ctrl+ Alt+ F1(przejście do innej wirtualnej konsoli).
Odpowiedzi:
Obawiam się, że nie mogę udzielić konkretnej odpowiedzi (ponieważ nie znam dobrze technologii), ale wierzę, że można ją znaleźć za pomocą D-Bus i ConsoleKit.
Na przykład, kiedy przełączam z X na VT iz powrotem, włączam to nasłuchiwanie
dbus-monitor
:W szczególności można użyć metody GetActiveSession . Oto jak z
dbus-send
(może wymagaćsudo
):Następnie, w zależności od aplikacji, będziesz chciał sprawdzić właściwości zwróconego obiektu, który powinien być ścieżką obiektu do sesji .
źródło
dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Session2 org.freedesktop.ConsoleKit.Session.GetUser
która odpowiada bieżącym identyfikatorem użytkownika. Stamtąd funkcja biblioteczna getpwuid może uzyskać nazwę użytkownika.Możesz użyć polecenia w, aby zobaczyć, kto jest zalogowany. Czas bezczynności i co powinno ci powiedzieć, co jest uruchamiane - w tym przypadku gdm oznacza aktywne logowanie, a czas bezczynności wskazuje, że użytkownik nie był w systemie od 2 dni. Porównaj to z logowaniem z blackbeauty, który ma czas bezczynności 0,00, co wskazuje, że jest on aktualnie używany.
źródło
Jest wiele sposobów:
whoami
w
echo $USER
logname
źródło
Innym poleceniem jest
Pokazuje bieżącą nazwę użytkownika logowania
źródło