Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/07/2018, à 18: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.
1532969177.png

Voila. smile

Par avance, merci à vous.

Dernière modification par lynn (Le 01/08/2018, à 15:00)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#2 Le 01/08/2018, à 14: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

Hors ligne

#3 Le 02/08/2018, à 00: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, à 07: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?

Hizoka a écrit :

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

Hors ligne

#5 Le 02/08/2018, à 10: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:

ssh disponible
1533198381.png

ssh indisponible
1533197913.png

Pas de réseau coté client
1533198128.png


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#6 Le 02/08/2018, à 22: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, à 10: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... tongue

#!/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

Hors ligne

#8 Le 03/08/2018, à 12: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, à 13: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... tongue

#!/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, à 13:38)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#10 Le 03/08/2018, à 14: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, à 14: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

Hors ligne

#12 Le 03/08/2018, à 15: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, à 15: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, à 15: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

Hors ligne

#15 Le 03/08/2018, à 15: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

Hors ligne

#16 Le 05/08/2018, à 10: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, à 10:20)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#17 Le 05/08/2018, à 14: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, à 15:15

lynn

Re : Demande de script "Status En ligne/Hors Ligne"

Merci LeoMajor. smile

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

Hors ligne