Nachricht an alle im LAN eingeloggten user ? []80% gelöst]

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Nachricht an alle im LAN eingeloggten user ? []80% gelöst]

Beitrag von mclien » 17.01.2009 18:58:04

Ich will von meinen Server aus gerne ein Nachricht an alle eingeloggten User im LAN senden.

script wollte ich folgendermassen aufbauen:
1. welche Rechner sind online (irgenwie sollte das mit ping abrufbar sein, aber mit der -b Option bekommeich es nicht hin)
2. wer ist online (who, denke ich)
3. welches Display wird bentuzt
4. Graphisches Popup (gmessage, xmessage)

zu 3. habe ich irgendwie gar keinen Plan
zu4. die Programme müssen immer an dem localen host ausgeführt werden. Ist ein bischen umständlich sich immer erst einzuloggen. Gibts auch ein xmessage Derifat/Substitut das es gleich übers Netz schicken kann?
[EDIT]
Letztlich gehts um eine Art "LAN Babyfon":
-Meine Frau sitzt im Wohnzimmer und schaut "Vom Winde verweht"
-ich natürlich nicht (bin im Arbeitszimmer und arbeite: Schaue also Babylon5 :-))
Ergebnis: Keine hört die Kinder rufen
Also brauchts einen Knopf, den die Kinder drücken und an jeden Rechner wird ein Sound gespielt und eine NAchricht angezeigt
(Der server steht praktischerweise zwischen den Kinderzimmern

Lösungen :
Auslösen des scripts:
http://ttyctrl.sourceforge.net/

Hiermit werden die ganzen Aktionen ausgelöst:

Code: Alles auswählen

#!/bin/bash

#Aufruf seriell.sh [welches kind]

# welches Netz (hier nur eins)
IPRANGE=192.168.1.

# nmapabfrage Rechner up
for i in `nmap -n -sP ${IPRANGE}0/24 | grep be\ up | awk '{ print $2 }'|sed 's/'$IPRANGE'//'`
do
  if [ $i -ge 2 -a $i -le 29 ];then
    # alle stand alone Linux Rechner:
    # 2-29
    for k in `ssh $IPRANGE$i who | grep \ : | awk '{ print $1 }'` # jeder logged in user
    do
      ssh -l $k $IPRANGE$i /pfadzumNFSshare/kind.sh $1 $k& #hier wird ein Miniscript auf dem remoterechner ausgeführt
    done
    ssh $IPRANGE$i ogg123 /daten/ogg/$1.ogg
  elif [ $i -ge 100 -a $i -le 119 ];then
    # 'alle' vdr-rechner
    # sound und OSD Nachricht
    # 100-119
    ssh $IPRANGE$i /root/kind_vdr.sh $1
  fi
done
Und auf jedem "betroffenen" X-Rechner wird dieses Script ausgeführt:

Code: Alles auswählen

#!/bin/bash

# dieser Befehl werden von remote mit dem richtigen user ausgeloest (seriell.sh)
# der bringt zwei inputs mit $1=kind $2=user der eigeloggt ist
export DISPLAY=`who | grep $2 | awk '{ print $2 }'`
gmessage -geometry 1200x500 -font "arial 300" -fg red -timeout 300 $1&
exit
Am vdr:
-sound und OSD Nachricht (vdr ist gerade aus, script kann ich nachreichen

(für die Windows Rechner habe ich noch keine Lsg, werde mal mit putty experimentieren
Zuletzt geändert von mclien am 10.02.2009 09:41:17, insgesamt 2-mal geändert.

kip
Beiträge: 8
Registriert: 22.06.2004 23:48:09
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von kip » 17.01.2009 20:39:00

So einfach wird das nicht gehen was du da vorhast - zumindestens nicht ohne einen Dienst der dir dabei hilft.

zu 1.) nmap kann das besser als Ping:
z.B.:

Code: Alles auswählen

nmap -sP 192.168.2.0/24
zu 2.) mit "online" meinst du wer auf dem System eingeloggt ist? who geht zwar, aber dazu musst du dich auf dem Remote System einloggen.
zu 3.) das sollte who dir auch sagen :o tuts zumind. bei mir:

Code: Alles auswählen

dennis@kip /home $ who
dennis   tty7         2009-01-16 14:37 (:0)
zu 4.) siehe 2 - Du musst dich einloggen.

Wie wäre es mit einem Instant Messanger?

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von mclien » 17.01.2009 21:51:56

kip hat geschrieben:So einfach wird das nicht gehen was du da vorhast - zumindestens nicht ohne einen Dienst der dir dabei hilft.
Das habe ich schon befürchtet.
Kann ja auch gerne ein script mit mehreren Diensten sein, muss aber ohne interaktion laufen. Also Befehl absetzen und überall erscheinen die Nachrichten (bzw. ggf. sogar akustische Signale)

zu.1) nmap ist prima ( hat bestimmt auch Optionen um nur die IPs zu bekommen, oder?)

zu 2) Klar meinte ich eingeloggt :oops:

zu 3) hätte ich ja auch mal selbst besser schauen können..

Allgemein:
Kann ich mich ein und ausloggen ohne Interaktion? (die Ausgabe kann ich ja in mein nfs share schreiben..)
Wie wäre es mit einem Instant Messanger?
(Kurze Pause für Wikipedia Besuch)
Da wird das aber mit dem Script ohne interaktion schlecht, oder?

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von mclien » 17.01.2009 22:39:25

kip hat geschrieben: zu 4.) siehe 2 - Du musst dich einloggen.
Ne, muss ich nicht:

Code: Alles auswählen

ssh [i]remotehost[/i] ./gmessage.sh
wo gmessage.sh:

Code: Alles auswählen

#!/bin/bash
export DISPLAY=:0
gmessage TEST
ssh mittels Schlüsselpaar, alle logins mit

Code: Alles auswählen

xhost +
und dann muss nur lokal und remoteuser der gleiche sein und dann sollte es funzen, oder?

kip
Beiträge: 8
Registriert: 22.06.2004 23:48:09
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von kip » 19.01.2009 03:34:41

mclien hat geschrieben:
kip hat geschrieben: zu 4.) siehe 2 - Du musst dich einloggen.
Ne, muss ich nicht:

Code: Alles auswählen

ssh [i]remotehost[/i] ./gmessage.sh
Das ist für mich auch einloggen. Auch wenn du's über SSH Keys realisierst ... in Wirklichkeit öffnet dieser Befehl ne Shell für dich und setzt das Command ab.

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von mclien » 19.01.2009 11:32:02

OK. Ich meine eher die aktive Tätigkeit 'sich einloggen'. Also selber mit shell um dann interaktiv darin was zu machen.

(Wenn ich recht entsinne -habe gerade keinen linux Rechner zur Hand- legt man ssh auch einen Unterschied nahe zwischen einloggen und remote einen Befehl ausführen).

Ich muss mal testen, ob ich die beiden Befehle auch per ssh losschicken kann, damit ich das script auf der clientseite nicht mehr brauche.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von Duff » 19.01.2009 11:41:11

Hast du denn auch Windows-Clients, die sich auf dem Server einloggen und denen du eine Nachricht senden möchtest?
(Würde mich nämlich interessieren, wie man dies dann umsetzen muss)
Oh, yeah!

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von mclien » 21.01.2009 15:29:58

Wenn überhaupt, betrifft das nur einen Windows Rechner (nicht als client) im Netz und da habe ich bisher noch keine Idee ausser Linpopup.
Zunächst will ich aber erstmal alle Linuxrechner benachrichtigen.

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von mclien » 27.01.2009 15:32:32

Da auf dem Windows Rechner auch ein x2go client installiert ist (und damit der XServer xming) werde ich wohl versuchen, das darüber umzusetzten. (Wie weiss ich noch nicht, aber wenn es einen XServer gibt, sollte man auch irgendwie gmessage benutzen können)

Benutzeravatar
TRex
Moderator
Beiträge: 8375
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von TRex » 28.01.2009 11:24:52

mit

ssh <user@host> <befehl>

kann man auch ein Programm starten. Ich könnte mir eine Implementierung so vorstellen:

Code: Alles auswählen

#!/bin/bash

IPRANGE=192.168.9. # Für Netzwerk 192.168.9.0

for (( i=2; i < 255; i++ ));
do
ping $IPRANGE$i;
if (( $? == 0 )) # geht das so?
ssh user@$IPRANGE$i irgendeinbefehl;
endif;
done
Fehler sind mit Absicht eingebaut.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

xdanx
Beiträge: 473
Registriert: 15.11.2007 22:07:42
Lizenz eigener Beiträge: GNU General Public License

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von xdanx » 28.01.2009 12:29:29

TRex2003 hat geschrieben:

Code: Alles auswählen

if (( $? == 0 )) # geht das so?
So sollte es auf jeden Fall gehen:

Code: Alles auswählen

 if [ $? -eq 0 ] 

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von mclien » 28.01.2009 16:01:28

Damit das auch auf dem Windows ankommt, reichts wenn da putty läuft?

Benutzeravatar
scruffy
Beiträge: 85
Registriert: 08.07.2005 20:58:22

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von scruffy » 28.01.2009 22:59:38

Nur gerade als Tipp, weil ich mich auch damit beschäftigt habe.

Dem Root-Benutzer und niemandem sonst Display-Zugriff mit xhost zu übertragen ist nicht möglich.

Die Lösung ist, mit der Environment-Variable Xauth root Zugriff zu geben:

Code: Alles auswählen

XAUTHORITY=/var/lib/gdm/:0.Xauth gmessage Nachricht

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von mclien » 02.02.2009 20:17:17

gaaanz blöde Frage: kommt das auch in die .bashrc?

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von mclien » 03.02.2009 17:57:53

Bin wohl zu Unwissend was xauth angeht....

-Wo muß ich das eintragen (jeden user?)
-Muß ich nicht erst ein neuen xauth cookie erstellen?
-Und wie stelle ich es an, daß nicht NUR Display 0 freigegeben wird, sondern genau das wo der user eingeloggt ist?

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von mclien » 10.02.2009 09:28:36

scruffy hat geschrieben: Die Lösung ist, mit der Environment-Variable Xauth root Zugriff zu geben:

Code: Alles auswählen

XAUTHORITY=/var/lib/gdm/:0.Xauth gmessage Nachricht
Ich habe noch einen anderen Weg gefunden:
-bei allen usern (aller Rechner) in die .ssh/authorized_keys(2) den public key des users eintragen, der das script startet
-X11 forwarding für ssh aktivieren
-dann das script mit dem user auslösen der auf dem entfernten host die Nachricht bekommen soll:

Code: Alles auswählen

ssh -l <user> <host> /pfadzumscript/script
-und das script macht dann nur noch den DISPLAY export und den gmessage Befehl
-das script selbst liegt auf einem NFS share, damit jeder drann kann

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Nachricht an alle im LAN eingeloggten user ?

Beitrag von Duff » 10.02.2009 09:40:22

Und was machst du mit den Windows-clients?
Oh, yeah!

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: Nachricht an alle im LAN eingeloggten user ? []80% gelöst]

Beitrag von mclien » 10.02.2009 12:37:33

da das bei mir nur einer ist und der nur zeiteise an ist, hat das nur niedrige Prio bei mir.
Aber testen will ich, ob ggf mit putty und Xming was auszurichten ist. Ggf muß man auf dem Win client dann immer putty und Xming starten und den rest dann analog zu den Linuxclients mit ssh-keys.

Antworten