Linux: Wie sende ich eine Nachricht an einen lokalen Benutzer, der bei X11 angemeldet ist?
10
Ist es möglich, eine Nachricht (Popup-Fenster oder ähnliches) an einen lokalen Benutzer zu senden, der über die Konsole bei X (xdm, Fluxbox) angemeldet ist? Beispiel: user1Wird protokolliert und verwendet X / Fluxbox, user2um sich von ssh an der Konsole in derselben Box anzumelden. Was muss user2ich tun, um eine Nachricht an zu senden user1?
Wenn ein Empfänger ( user1in meinem Beispiel) bei X11 angemeldet ist und noch kein xtermanderes Terminal geöffnet hat , wallfunktioniert das auch? Ich denke, das user1wird keine Nachrichten sehen.
Marioosh
Ich habe meine Antwort aktualisiert und die 'xmessage'-Lösung hinzugefügt. Dadurch wird dem Benutzer ein kleines Fenster angezeigt, unabhängig davon, ob ein Terminal geöffnet ist.
MJK
1
Übrigens ist 'apropos' ein nützliches Dienstprogramm, um es zu wissen. Es durchsucht Handbuchseiten nach dem Text, den Sie an ihn übergeben. Versuchen Sie, 'apropos message' auszuführen, und sehen Sie, was zurückgegeben wird.
MJK
Ich weiß, xmessageaber wie man es durchläuft user1und dieses kleine Fenster auf user2dem Bildschirm öffnet ? ist es überhaupt möglich ?
Marioosh
@marioosh Ich würde auch gerne wissen, wie das geht. Hast du es jemals herausgefunden?
2
In der Regel werden X11-Sitzungen in einem "privaten" Modus gestartet. Sie benötigen daher eines von zwei Dingen: entweder die Zusammenarbeit von user2, um auf ihre Bildschirme zugreifen zu können, oder die Superuser-Berechtigungen, um in ihre Bildschirme einzudringen .
GEFAHR: Denken Sie daran, sobald Sie Zugriff auf den Bildschirm haben, können Sie auch Tastenanschläge (möglicherweise einschließlich Kennwörter) erfassen und Screenshots erstellen. Dies ist also ein großes Sicherheitsrisiko.
In den meisten Fällen ist es vorzuziehen, stattdessen ein Messaging-Tool oder ein Chat-Programm für diese Dinge zu verwenden.
Vorbehalte beiseite:
Zusammenarbeiten
Wenn Sie user2den user1Zugriff auf den Bildschirm zulassen möchten, user2müssen Sie zunächst einen Befehl wie den folgenden eingeben:
xhost +si:localuser:user1
Dies könnte möglicherweise zu einem Startskript hinzugefügt werden. Ich kenne Fluxbox nicht, aber ich gehe davon aus, dass es einen rcoder Session-Start-Hook hat.
Sobald dies ausgegeben wurde, user1kann auf user2das Display geschrieben werden, wenn sie es finden können.
Wenn Sie user2sich dessen bewusst sind, können Sie es jederzeit auf user1andere Weise senden .
Anzeige eines anderen Benutzers suchen
Auf einer typischen Workstation ist es ungewöhnlich, dass mehr als ein oder zwei Benutzer angemeldet sind. In diesem Fall ist es möglicherweise eine praktikable Lösung, zu erraten, dass die gewünschte Anzeige 0, 1 oder vielleicht 2 ist.
Für eine vollständigere Lösung nehmen wir jedoch an, dass Sie einen Computer haben, auf dem sehr viele Benutzer angemeldet sein könnten, und versuchen, den gewünschten zu finden.
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
dann user1kann endlich (mit dem oben erhaltenen DISPLAY-Wert; ich habe gerade :14.0hier geschrieben ...)
DISPLAY=:14.0 xmessage "Hello, user2"
Senden Sie stattdessen eine Benachrichtigung
Der Vollständigkeit halber funktioniert das Folgende zumindest auf dem Gnome-Desktop. Ich weiß nicht, ob Fluxbox ein Benachrichtigungs-Widget hat.
DISPLAY=:14.0 notify-send "Hello, user2"
Dies bietet viel benutzerfreundlichere Anzeigeoptionen und wird wahrscheinlich auf dem Bildschirm des Benutzers auf eine freundlichere Weise angezeigt.
user1
in meinem Beispiel) bei X11 angemeldet ist und noch keinxterm
anderes Terminal geöffnet hat ,wall
funktioniert das auch? Ich denke, dasuser1
wird keine Nachrichten sehen.xmessage
aber wie man es durchläuftuser1
und dieses kleine Fenster aufuser2
dem Bildschirm öffnet ? ist es überhaupt möglich ?In der Regel werden X11-Sitzungen in einem "privaten" Modus gestartet. Sie benötigen daher eines von zwei Dingen: entweder die Zusammenarbeit von
user2
, um auf ihre Bildschirme zugreifen zu können, oder die Superuser-Berechtigungen, um in ihre Bildschirme einzudringen .GEFAHR: Denken Sie daran, sobald Sie Zugriff auf den Bildschirm haben, können Sie auch Tastenanschläge (möglicherweise einschließlich Kennwörter) erfassen und Screenshots erstellen. Dies ist also ein großes Sicherheitsrisiko.
In den meisten Fällen ist es vorzuziehen, stattdessen ein Messaging-Tool oder ein Chat-Programm für diese Dinge zu verwenden.
Vorbehalte beiseite:
Zusammenarbeiten
Wenn Sie
user2
denuser1
Zugriff auf den Bildschirm zulassen möchten,user2
müssen Sie zunächst einen Befehl wie den folgenden eingeben:Dies könnte möglicherweise zu einem Startskript hinzugefügt werden. Ich kenne Fluxbox nicht, aber ich gehe davon aus, dass es einen
rc
oder Session-Start-Hook hat.Sobald dies ausgegeben wurde,
user1
kann aufuser2
das Display geschrieben werden, wenn sie es finden können.Wenn Sie
user2
sich dessen bewusst sind, können Sie es jederzeit aufuser1
andere Weise senden .Anzeige eines anderen Benutzers suchen
Auf einer typischen Workstation ist es ungewöhnlich, dass mehr als ein oder zwei Benutzer angemeldet sind. In diesem Fall ist es möglicherweise eine praktikable Lösung, zu erraten, dass die gewünschte Anzeige 0, 1 oder vielleicht 2 ist.
Für eine vollständigere Lösung nehmen wir jedoch an, dass Sie einen Computer haben, auf dem sehr viele Benutzer angemeldet sein könnten, und versuchen, den gewünschten zu finden.
dann
user1
kann endlich (mit dem oben erhaltenen DISPLAY-Wert; ich habe gerade:14.0
hier geschrieben ...)Senden Sie stattdessen eine Benachrichtigung
Der Vollständigkeit halber funktioniert das Folgende zumindest auf dem Gnome-Desktop. Ich weiß nicht, ob Fluxbox ein Benachrichtigungs-Widget hat.
Dies bietet viel benutzerfreundlichere Anzeigeoptionen und wird wahrscheinlich auf dem Bildschirm des Benutzers auf eine freundlichere Weise angezeigt.
quelle
for subproc in
Was? Ich denke, Ihr Skript ist hier beschädigt.