#1 Le 30/07/2018, à 17:50
- lynn
Demande de script "Status En ligne/Hors Ligne"
Bonjour,
J'aurais une demande de script ou d'extension afin d'afficher de façon visuelle, dans la barre du haut de Gnome Shell, le status "En ligne/Hors ligne" d'un pc distant.
Le fonctionnement de la chose telle que je la conçoie:
Une boucle de vérification toutes les minutes. La commande que j'ai trouvé pour vérifier l'état du pc distant (Il existe peut-être d'autres commandes plus adaptées..?):
nc -z -i 2 -w 2 xxx.xxx.xxx.xxx 22;echo $?
NB: openssh-server est installé sur le pc distant.
Si la valeur est 0, l'icône affichée dans la barre est verte, si la valeur est 1, c'est rouge, si pas de réseau (coté client), on affiche une icône d'erreur.
Voila.
Par avance, merci à vous.
Dernière modification par lynn (Le 01/08/2018, à 14:00)
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
En ligne
#2 Le 01/08/2018, à 13:30
- lynn
Re : Demande de script "Status En ligne/Hors Ligne"
Personne..?
Si un logiciel ou une extension fait déjà ce que je souhaite, je suis toute ouïe car je n'ai pas trouvé..! Merci.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
En ligne
#3 Le 01/08/2018, à 23:20
- Hizoka
Re : Demande de script "Status En ligne/Hors Ligne"
Regarde du côté de zenity ou taf pour afficher une icône,
Tu lances ta commande et en fonction du résultat tu affiches la bonne image...
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#4 Le 02/08/2018, à 06:16
- lynn
Re : Demande de script "Status En ligne/Hors Ligne"
Bonjour Hizoka,
Tu peux donner un exemple pour zenity car après avoir parcouru le man, je n'ai pas trouvé la façcon de faire pour afficher une icône?
taf pour afficher une icône,
Qu'est-ce que taf..?
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
En ligne
#5 Le 02/08/2018, à 09:36
- lynn
Re : Demande de script "Status En ligne/Hors Ligne"
J'allais répondre à Brunod mais le message à disparu...
Un exemple de script qui fonctionne dans un terminal sans rien d'autre.
while :; do nc -z -i 1 -w 1 xxx.xx.xxx.xx 22; case "$?" in 0) printf "On affiche l'icône verte\r";; 1) printf "On affiche l'icône rouge\r";; esac; sleep 60; done
Ce que j'aimerais, c'est que l'icône correspondante s'affiche dans la barre du haut de Gnome Shell en fonction de l'état du pc distant. Que ça ressemble à ça:
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
En ligne
#6 Le 02/08/2018, à 21:30
- Hizoka
Re : Demande de script "Status En ligne/Hors Ligne"
oups c'est pas taf mais yad... merci la correction automatique...
et pour zenity : zenity --notification --window-icon "image.png"
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#7 Le 03/08/2018, à 09:26
- lynn
Re : Demande de script "Status En ligne/Hors Ligne"
Merci Hizoka.
J'ai été voir du côté de yad et j'ai fait un truc qui fonctionne mais pas propre...
Disons qu'avec cette solution, il ne faut pas avoir beaucoup d'instance de yad en même temps parce que ça kill sévère...
#!/bin/bash
# Required: yad
ip=192.168.0.100
port=22
delay=10
_state_server() {
nc -z -i 1 -w 1 "${ip}" "${port}"
echo $?;
}
_server_on() {
yad --notification --command="" --image="emblem-default"
}
while :; do
case `_state_server` in
0) [ $(pgrep yad) ] && killall yad; `_server_on` &
while [ `_state_server` -eq "0" ]; do
{ sleep "${delay}" || exit; };
done
;;
1) [ $(pgrep yad) ] && killall yad;
;;
esac
sleep "${delay}"
done
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
En ligne
#8 Le 03/08/2018, à 11:53
- Watael
Re : Demande de script "Status En ligne/Hors Ligne"
_state_server n'a pas besoin d'afficher le code de retour, comme n'importe quelle autre commande, son code de retour peut être utilisé sans être affiché :
false && echo "false est vrai #impossible" || echo "false est \"vrai\" #toujours"
if true; then echo "true est vrai #toujours"; else echo "true est \"faux\" #impossible"; fi
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 03/08/2018, à 12:23
- lynn
Re : Demande de script "Status En ligne/Hors Ligne"
@Watael
Si j'enlève le echo $? de la fonction, rien ne se passe...
Sinon, j'ai modifié quelques trucs pour récupérer le pid de yad afin de ne tuer que l'instance en cours; Toujours rien de très académique mais ça fonctionne...
#!/bin/bash
# Required: yad
_ip="192.168.0.41"
_port="22"
_delay="10"
_pid="/tmp/yad_pid"
_state_server() {
nc -z -i 1 -w 1 "${_ip}" "${_port}"
echo $?;
}
_server_on() {
yad --notification --command="" --image="emblem-default" 2>/dev/null & echo $! > "${_pid}";
}
[ $(pgrep yad) ] && kill -SIGKILL "$(cat ${_pid})"
while :; do
case `_state_server` in
0) [ $(pgrep yad) ] && kill -SIGKILL "$(cat ${_pid})"; `_server_on` &
while [ `_state_server` -eq "0" ]; do
{ sleep "${_delay}" || exit; };
done
;;
1) [ $(pgrep yad) ] && kill -SIGKILL "$(cat ${_pid})";
;;
esac
sleep "${_delay}"
done
Édité: Mofifications sur le script.
Dernière modification par lynn (Le 03/08/2018, à 12:38)
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
En ligne
#10 Le 03/08/2018, à 13:11
- Watael
Re : Demande de script "Status En ligne/Hors Ligne"
il n'y a pas de raison d'utiliser de Substitution de commandes.
je t'ai montré un exemple avec true/false en tant que commande.
dans ton cas :
while :; do if _state_server; then ... while _state_server...
et utilise pkill, au lieu de manipuler un fichier pour ne contenir qu'un pid.
si une commande identique est exécutée dans tous les cas d'une condition, alors elle n'a pas à être dans la condition !
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 03/08/2018, à 13:44
- lynn
Re : Demande de script "Status En ligne/Hors Ligne"
Comme ceci, ça convient? Le truc, c'est que si il y a une autre notification de yad, pkill flingue tout..!
#!/bin/bash
# Required: yad
_ip="192.168.0.41"
_port="22"
_delay="10"
_state_server() {
nc -z -i 1 -w 1 "${_ip}" "${_port}"
}
_server_on() {
yad --notification --command="" --image="emblem-default" &
}
while :; do
if `_state_server`
then
`_server_on`&
while `_state_server`; do
{ sleep "${_delay}" || exit; };
done
else
pkill yad
fi
sleep "${_delay}"
done
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
En ligne
#12 Le 03/08/2018, à 14:02
- Hizoka
Re : Demande de script "Status En ligne/Hors Ligne"
utilise $! qui renvoie le pid de la dernière commande lancée en fond, comme ça, tu peux killer uniquement celle-ci.
konsole &
kill $!
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#13 Le 03/08/2018, à 14:06
- Watael
Re : Demande de script "Status En ligne/Hors Ligne"
il n'y a pas de raison d'utiliser de Substitution de commandes.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#14 Le 03/08/2018, à 14:28
- lynn
Re : Demande de script "Status En ligne/Hors Ligne"
Correction
#!/bin/bash
# Required: yad
_ip="192.168.0.41"
_port="22"
_delay="10"
_state_server() {
nc -z -i 1 -w 1 "${_ip}" "${_port}"
}
_server_on() {
yad --notification --command="" --image="emblem-default" &
}
while :; do
if _state_server
then
_server_on&
while _state_server; do
{ sleep "${_delay}" || exit; };
done
else
pkill yad
while ! _state_server; do
{ sleep "${_delay}" || exit; };
done
fi
sleep "${_delay}"
done
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
En ligne
#15 Le 03/08/2018, à 14:45
- lynn
Re : Demande de script "Status En ligne/Hors Ligne"
Ajout: Tuer le process yad en cours.
#!/bin/bash
# Required: yad
_ip="192.168.0.41"
_port="22"
_delay="10"
_state_server() {
nc -z -i 1 -w 1 "${_ip}" "${_port}"
}
_server_on() {
yad --notification --command="" --image="emblem-default" &
}
while :; do
if _state_server
then
_server_on; _pid=$!
while _state_server; do
{ sleep "${_delay}" || exit; };
done
else
pgrep yad && kill "${_pid}"
while ! _state_server; do
{ sleep "${_delay}" || exit; };
done
fi
sleep "${_delay}"
done
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
En ligne
#16 Le 05/08/2018, à 09:13
- lynn
Re : Demande de script "Status En ligne/Hors Ligne"
Quelques modifications et simplifications...
#!/bin/bash
##
### Requires: yad
##
# If this script is already executed, then exit.
#
[ -n "$(pidof -x -o $$ ${0##*/})" ] && exit
## Variables
#
i_p="192.168.0.43"
delay="30"
## Ping server
#
ping_server() {
ping -c1 -W1 "${i_p}" >/dev/null;
}
## Display yad icon
#
show_yad_icon() {
yad --notification --command="" --image="emblem-system"& > /dev/null 2>&1;
}
while :; do
if ping_server; then
show_yad_icon
while ping_server; do
sleep "${delay}"
done
kill $!
else
until ping_server; do
sleep "${delay}"
done
fi
done
Dernière modification par lynn (Le 05/08/2018, à 09:20)
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
En ligne
#17 Le 05/08/2018, à 13:58
- LeoMajor
Re : Demande de script "Status En ligne/Hors Ligne"
bonjour,
tu as un exemple de code; à adapter
cat scripts/indicator.py
# This code is an example for a tutorial on Ubuntu Unity/Gnome AppIndicators:
# http://candidtim.github.io/appindicator/2014/09/13/ubuntu-appindicator-step-by-step.html
import os
import signal
import json
from urllib import request
from urllib.error import URLError
from urllib.request import urlopen
from gi.repository import Gtk as gtk
from gi.repository import AppIndicator3 as appindicator
from gi.repository import Notify as notify
APPINDICATOR_ID = 'myappindicator'
def main():
indicator = appindicator.Indicator.new(APPINDICATOR_ID, os.path.abspath('sample_icon.svg'), appindicator.IndicatorCategory.SYSTEM_SERVICES)
indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
indicator.set_menu(build_menu())
notify.init(APPINDICATOR_ID)
gtk.main()
def build_menu():
menu = gtk.Menu()
item_joke = gtk.MenuItem('Joke')
item_joke.connect('activate', joke)
menu.append(item_joke)
item_quit = gtk.MenuItem('Quit')
item_quit.connect('activate', quit)
menu.append(item_quit)
menu.show_all()
return menu
def fetch_joke():
with urlopen('http://api.icndb.com/jokes/random?limitTo=[nerdy]') as req:
msg = req.read();
msg = msg.decode('utf-8')
joke = json.loads(msg)['value']['joke']
return joke
def joke(_):
notify.Notification.new("<b>Joke</b>", fetch_joke(), None).show()
def quit(_):
notify.uninit()
gtk.main_quit()
if __name__ == "__main__":
signal.signal(signal.SIGINT, signal.SIG_DFL)
main()
Hors ligne
#18 Le 05/08/2018, à 14:15
- lynn
Re : Demande de script "Status En ligne/Hors Ligne"
Merci LeoMajor.
J'avais vu cet exemple mais je n'ai pas les compétences nécessaires pour l'adapter à mes besoins.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
En ligne