Linux: Jak wysłać wiadomość do lokalnego użytkownika zalogowanego do X11?

10

Czy można wysłać wiadomość (wyskakujące okienko lub coś) do lokalnego użytkownika zalogowanego do X (xdm, fluxbox) z konsoli? Na przykład: user1jest zalogowany i używa X / fluxboksa, user2loguje się w tym samym polu przez ssh do konsoli. Teraz - co user2trzeba zrobić, aby wysłać wiadomość user1?

marioosh
źródło

Odpowiedzi:

15

xmessageNarzędzie pozwala zrobić dokładnie to; prezentować wyskakujące okienko użytkownikom z wiadomością tekstową w środku.

Przykład: użytkownik2 loguje się do sesji BASH na komputerze i wydaje następujące problemy:

export DISPLAY=':0.0'
xmessage "some message here"

jeśli zalogujesz się do sesji TSCH, będzie to wyglądać mniej więcej tak:

setenv DISPLAY ':0.0'
xmessage "some message here'

Alternatywnie możesz wysyłać wiadomości do sesji terminalowych na jeden z dwóch sposobów:

Używanie wall(= ostrzegaj wszystkich [użytkowników])

Ze strony podręcznika:
Wall wyświetla zawartość pliku lub domyślnie standardowe wejście na terminalach wszystkich zalogowanych użytkowników.

Jeśli chcesz kierować reklamy do określonego użytkownika, użyj write. Znów człowiek mówi nam:

Narzędzie do zapisu pozwala komunikować się z innymi użytkownikami, kopiując linie z terminala do ich.

mjk
źródło
Jeśli odbiorca ( user1w moim przykładzie) jest zalogowany do X11 i nie otworzył się xtermlub inny terminal - też będzie walldziałał? Myślę, że user1nie zobaczy wiadomości.
marioosh
Zaktualizowałem swoją odpowiedź, aby uwzględnić rozwiązanie „xmessage”. To pokaże małe okno dla użytkownika, niezależnie od tego, czy ma otwarty terminal.
mjk
1
Nawiasem mówiąc, „apropos” jest użytecznym narzędziem do poznania; przeszukuje strony podręcznika pod kątem przekazywanego tekstu. Spróbuj uruchomić „komunikat apropos” i zobacz, co zwraca.
mjk
Wiem, xmessageale jak go uruchomić user1i otworzyć to małe okno na user2ekranie? czy to w ogóle możliwe?
marioosh
@marioosh Chciałbym również wiedzieć, jak to zrobić. Czy kiedykolwiek to rozgryzłeś?
2

Z reguły sesje X11 są zwykle uruchamiane w trybie „prywatnym”, więc potrzebujesz jednej z dwóch rzeczy: albo współpracy, user2aby umożliwić dostęp do ich ekranów, albo uprawnień administratora do „włamania się” do ich ekranów.

NIEBEZPIECZEŃSTWO: Pamiętaj, że po uzyskaniu dostępu do ich ekranu możesz także robić zrzuty klawiszy (potencjalnie włączając hasła) i robić zrzuty ekranu, więc jest to duże zagrożenie bezpieczeństwa.

W większości przypadków lepiej jest używać do tego celu narzędzia do przesyłania wiadomości lub programu do czatowania.

Poza zastrzeżeniami:

Współdziałanie

Jeśli user2chcesz zezwolić user1na dostęp do ich ekranu, najpierw user2musisz wydać polecenie:

 xhost +si:localuser:user1

Można to potencjalnie dodać do jakiegoś skryptu startowego; Nie znam Fluxboksa, ale zakładam, że ma rchaczyk na początku sesji.

Po przeanalizowaniu tego, user1może napisać na user2wyświetlaczu, jeśli będzie w stanie go znaleźć.

Jeśli user2jest tego świadomy, zawsze mogą go wysłać user1w inny sposób.

Znajdowanie wyświetlacza innego użytkownika

Na typowej stacji roboczej zdarza się, że zalogowanych jest więcej niż jeden lub dwóch użytkowników; w takim przypadku „zgadywanie”, że pożądany ekran to 0, 1, a może 2, może być wykonalnym rozwiązaniem.

Jednak, aby uzyskać bardziej kompletne rozwiązanie, załóżmy, że masz komputer, na którym można się zalogować bardzo wielu użytkowników, i spróbuj znaleźć ten, który chcesz.

for proc in /proc/[0-9]*/
do
     if [ Xorg = $(< $proc/comm ) ] 2>/dev/null && \
        [ $(id -u user2) -eq $(< $proc/loginuid) ] 2>/dev/null
     then
        for subproc in $(
        do
            echo "user2 display=" $(perl -ne 'if (m,DISPLAY=(.*)\0,) { print $1 }' < $subproc/environ)
        done
     fi
done

to user1może w końcu (używając wartości DISPLAY uzyskanej powyżej; właśnie :14.0tu napisałem …)

DISPLAY=:14.0 xmessage "Hello, user2"

Zamiast tego wysyłam powiadomienie

W trosce o kompletność, co najmniej następujące działa na pulpicie Gnome. Nie wiem, czy Fluxbox ma widget powiadomień.

 DISPLAY=:14.0 notify-send "Hello, user2"

Ma o wiele bardziej przyjazne dla użytkownika opcje wyświetlania i prawdopodobnie pojawi się w bardziej przyjazny sposób na ekranie użytkownika.

BRPocock
źródło
for subproc inco? Myślę, że twój skrypt jest tutaj uszkodzony.
Stéphane