[script shell] ajouter des options.?? [RÉSOLU]

Questions et astuces concernant l'installation et la configuration d'archlinux
Répondre
Avatar de l’utilisateur
oxydium
Daikyu
Messages : 61
Inscription : dim. 27 août 2017, 17:14
Localisation : Dans l'engrenage

[script shell] ajouter des options.?? [RÉSOLU]

Message par oxydium » sam. 06 janv. 2018, 18:36

bonsoir.

suite à des petits soucis avec Touchpad-Indicator, qui a parfois du mal à désactiver mon touchpad, j'ai décidé de contourner le problème avec un script shell.

le script en question (récupéré chez nos confrères anglais), c'est le seul qui fonctionne correctement

Code : Tout sélectionner

!/usr/bin/env bash

## Get the touchpad id. The -P means perl regular expressions (for \K)
## the -i makes it case insensitive (better portability) and the -o
## means print only the matched portion. The \K discards anything matched
## before it so this command will print the numeric id only.
TID=$(xinput list | grep -iPo 'touchpad.*id=\K\d+')

## Run every second
while :
do
   ## Disable the touchpad if there is a mouse connected
   ## and enable it if there is none.
    xinput list | grep -iq mouse &&  xinput disable "$TID" || xinput enable "$TID"
    ## wait one second to avoind spamming your CPU
    sleep 1
done
j'aimerai savoir si c'est possible d'y rajouter des options.
par exemple, au moment où je débranche ma souris, et que le touchpad s'active, eh bin qu'il y ait une notification visuelle avec un message que je choisirais.
et idem quand je rebranche la souris pour désactiver le touchpad.
ou une notification sonore, ou les deux (visuelles + sonores).

et si il est possible d'avoir un icone dans le panel pour indiquer l'état du touchpad (actif ou inactif)
en faite un peu comme touchpad-indicator, mais que je mettrais dans mon script

vous pensez que c'est réalisable à partir d'un script shell, ou pas du tout.??

j'utilise ArchLinux avec Cinnamon 3.6.7-1
Merci
Dernière édition par oxydium le mar. 09 janv. 2018, 21:07, édité 1 fois.
Le silence est l'apanage des lâches

Avatar de l’utilisateur
oxydium
Daikyu
Messages : 61
Inscription : dim. 27 août 2017, 17:14
Localisation : Dans l'engrenage

Re: [script shell] ajouter des options.??

Message par oxydium » dim. 07 janv. 2018, 20:24

non ça n'est pas possible d'ajouter des options???
Le silence est l'apanage des lâches

Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10490
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [script shell] ajouter des options.??

Message par FoolEcho » dim. 07 janv. 2018, 21:25

Salut,
oxydium a écrit :
sam. 06 janv. 2018, 18:36
vous pensez que c'est réalisable à partir d'un script shell, ou pas du tout.??
La question de la notification peut se régler facilement avec:

Code : Tout sélectionner

notify-send "Le message à afficher" -t <temps d'affichage en millisecondes>

:chinois:

Néanmoins le script que tu utilises est consommateur de ressources (boucle infinie, beurk).
Mieux vaudrait passer par au choix:
- une règle udev (le mieux si tu souhaites que ce comportement s'applique à tout utilisateur du système). Le wiki te fournit d'ailleurs la solution du cas qui t'intéresse: https://wiki.archlinux.org/index.php/To ... _detection .
- un script que tu actives à la demande et/ou au démarrage de ta session. Ce sujet date un peu, mais la forme est meilleure... et reprend d'ailleurs le notify-send (ou reprendre ton script, moins la boucle infinie): https://bbs.archlinux.org/viewtopic.php ... 0#p1329810
«The following statement is not true. The previous statement is true.» :nage:

Avatar de l’utilisateur
oxydium
Daikyu
Messages : 61
Inscription : dim. 27 août 2017, 17:14
Localisation : Dans l'engrenage

Re: [script shell] ajouter des options.??

Message par oxydium » dim. 07 janv. 2018, 22:57

salut
merci pour la réponse.

je sais que le choix de ce script est beurk, mais l'ennui c'est que la régle udev ne fonctionne pas :/ ou très probablement j'ai pas tout compris les manips..
et le script que tu m'as fournis, bah il fonctionne pas non plus.... j'ai beau débrancher rebrancher la souris, le touchpad reste constamment activé..
pourtant je l'ai mis au démarrage des applications...
et do
mais justement, si j'enlève la boucle infinie sur le script, comment le script va savoir que la souris est branchée ou non.?? et donc activer ou non le touchpad.??
c'est ça que je comprends pas trop en faite :/
Le silence est l'apanage des lâches

Avatar de l’utilisateur
oxydium
Daikyu
Messages : 61
Inscription : dim. 27 août 2017, 17:14
Localisation : Dans l'engrenage

Re: [script shell] ajouter des options.??

Message par oxydium » lun. 08 janv. 2018, 00:43

Bah en faite quand j'enlève la boucle infinie et que je branche débranche la souris plusieurs fois de suite, le cou se met a mouliner dans les 80% sans s'arrêter et dans htop je vois bien le script qui consomme...

Du coup je l'ai viré et retour a la case départ..
Pour moi c'est important, a l'école on cesse de brancher débrancher la souris, et touchpad indicator finit souvent par plus faire son job et me laisse le touchpad bloqué alors que j'en ai besoin, obligé de rebooter le pc en plein cours..

Si t'as un script magique
Ou un pouvoir divin
Pour résoudre le problème et faire en sorte que ce touchpad fonctionne correctement, je suis preneuse.. Parce que là j'en ai ras la casquette d'essayer 2 millions de scripts qui fonctionnent pas mieux les uns que les autres.

Je vais me coucher, demain y a école.......
En espérant que tu sois mon sauveur..
Good night.
Le silence est l'apanage des lâches

Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10490
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [script shell] ajouter des options.??

Message par FoolEcho » lun. 08 janv. 2018, 18:59

oxydium a écrit :
dim. 07 janv. 2018, 22:57
je sais que le choix de ce script est beurk, mais l'ennui c'est que la régle udev ne fonctionne pas :/ ou très probablement j'ai pas tout compris les manips..
et le script que tu m'as fournis, bah il fonctionne pas non plus.... j'ai beau débrancher rebrancher la souris, le touchpad reste constamment activé..
pourtant je l'ai mis au démarrage des applications...
Il faut voir comment tu as défini la règle udev.
Pour le script au démarrage, il ne tourne justement... qu'au démarrage. :mrgreen: Si tu connectes ou déconnectes une souris par la suite il faut le relancer... mais c'est plus le boulot de la règle udev justement (ce qui est moins coûteux qu'un démon puisque précisément c'est le boulot d'udev de réagir à ce type d'événement).
«The following statement is not true. The previous statement is true.» :nage:

Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 15309
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [script shell] ajouter des options.??

Message par benjarobin » lun. 08 janv. 2018, 19:53

Je ne suis pas tout à fait d'accord, oui je me permet de rajouter mon grain de sel :-)
Je trouve très moche que udev interagisse avec Xorg, car Xorg est au niveau utilisateur (il peut même maintenant être lancé 100% en utilisateur si on a des drivers libres). Ce qui veut dire que la règle udev doit avoir connaissance de la session lancée...

Une boucle bien codée ce n'est pas si gourmand. Si on veut faire vraiment propre il faut avoir une application coté utilisateur lancé depuis la session Xorg, qui écoute les événements (udev, ...) et réagissent en fonction. Si on veut le faire en script, il y a je pense moyen de faire un truc propre en utilisant udevadm monitor et les options --subsystem-match= / --tag-match=

Essaye ceci :

Code : Tout sélectionner

#!/bin/bash

## Get the touchpad id. The -P means perl regular expressions (for \K)
## the -i makes it case insensitive (better portability) and the -o
## means print only the matched portion. The \K discards anything matched
## before it so this command will print the numeric id only.
TID=$(xinput list | grep -iPo 'touchpad.*id=\K\d+')

if [ -s "$TID" ] ; then
    echo "Touchpad not found"
    exit 1
fi

udevadm monitor -k -s input | while read line ; do

    if grep -q -E "KERNEL.*add.*mouse" <<< "$line" ; then

        xinput disable "$TID"
        notify-send "Touchpad off" "Mouse present"

    elif grep -q -E "KERNEL.*remove.*mouse" <<< "$line" ; then

        xinput enable "$TID"
        notify-send "Touchpad on" "Mouse not present"
    fi

done
Le script ne gère pas le cas de 2 souris de branchées
Zsh | KDE | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)

Avatar de l’utilisateur
oxydium
Daikyu
Messages : 61
Inscription : dim. 27 août 2017, 17:14
Localisation : Dans l'engrenage

Re: [script shell] ajouter des options.??

Message par oxydium » mar. 09 janv. 2018, 10:19

Coucou à vous deux

@foolecho
haaaa je commence à comprendre le système, même si il y a encore quelques zones d'ombre dans ma petite tête
t'aura remarqué que je ne suis pas très douée pour ce qui est des règles udev :copain:

@benjarobin
merci :D :D ton script fonctionne nickel, les notifications aussi, mais comme toutes les filles, je vais faire ma pénible maniaque.
mais quand la souris est branchée au pc au moment où je l'allume, le touchpad ne se désactive pas tout seul, je dois débrancher la souris et la rebrancher pour que le touchpad se désactive.

j'ai bien mis le script dans les programmes au démarrage, et j'ai coché la petite case (dans Nemo) dans les permissions du script pour qu'il soit exécuté comme un programme.
si tu as une solution pour ce petit détail, ça serait le top du top, et promis j'arrête de vous embêter après :chinois:

PS :
je ne savais pas qu'il y avait des gens qui utilisent 2 souris en simultané :roll: :shock: :o
Le silence est l'apanage des lâches

Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 15309
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [script shell] ajouter des options.??

Message par benjarobin » mar. 09 janv. 2018, 13:25

Code : Tout sélectionner

#!/bin/bash

## Get the touchpad id. The -P means perl regular expressions (for \K)
## the -i makes it case insensitive (better portability) and the -o
## means print only the matched portion. The \K discards anything matched
## before it so this command will print the numeric id only.
TID=$(xinput list | grep -iPo 'touchpad.*id=\K\d+')

if [ -s "$TID" ] ; then
    echo "Touchpad not found"
    exit 1
fi

list=`xinput --list | grep -i mouse`

if [ ${#list} -eq 0 ]; then
    xinput enable "$TID"
else
    xinput disable "$TID"
fi

udevadm monitor -k -s input | while read line ; do

    if grep -q -E "KERNEL.*add.*mouse" <<< "$line" ; then

        xinput disable "$TID"
        notify-send "Touchpad off" "Mouse present"

    elif grep -q -E "KERNEL.*remove.*mouse" <<< "$line" ; then

        xinput enable "$TID"
        notify-send "Touchpad on" "Mouse not present"
    fi

done
Non testé, mais cela devrait faire l'affaire :-)
Zsh | KDE | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)

Avatar de l’utilisateur
oxydium
Daikyu
Messages : 61
Inscription : dim. 27 août 2017, 17:14
Localisation : Dans l'engrenage

Re: [script shell] ajouter des options.??

Message par oxydium » mar. 09 janv. 2018, 21:07

en effet ça fait l'affaire, t'es trop fort :D :D :D :bravo: :bravo:
je vais bien garder au chaud le script pour jamais le perdre :mrgreen: :mrgreen:
avec les notifs (que j'ai adapté), et au moins contrairement à touchpad-indicator, ça a pas bogué de l'après-midi, et en + ça consomme moins de ram, 1.8 Mo d'après le monitor system, c'est bien mieux que les 22 Mo de touchpad-indicator, c'est le top du top.
et ça fonctionne même en le mettant en fichier caché dans le /home, trop cool.

Merci à toi, vraiment, tu viens de me simplifier la vie pour mes cours d'école je suis sûre de décrocher mon diplôme dans de bonnes conditions :humour: :copain:
et merci à FoolEcho aussi :bisous:

je passe en résolu
bonne année à vous d'ailleurs :bisous:

PS :
vous devriez mettre le script dans le wiki, ça pourrait en intéresser + d'un :P
Le silence est l'apanage des lâches

Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10490
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [script shell] ajouter des options.??

Message par FoolEcho » mar. 09 janv. 2018, 22:18

benjarobin a écrit :
lun. 08 janv. 2018, 19:53
Je ne suis pas tout à fait d'accord, oui je me permet de rajouter mon grain de sel :-)
Je trouve très moche que udev interagisse avec Xorg, car Xorg est au niveau utilisateur (il peut même maintenant être lancé 100% en utilisateur si on a des drivers libres). Ce qui veut dire que la règle udev doit avoir connaissance de la session lancée...
Je n'ai absolument pas compris ta remarque. La règle udev se fiche pas mal de l'environnement graphique... même si pour le script qui peut y être défini c'est une autre paire de manche, bien sûr. Elle est là pour réagir à un branchement à chaud, point. :|

Mais bon, peu m'importe.
«The following statement is not true. The previous statement is true.» :nage:

Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 15309
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [script shell] ajouter des options.?? [RÉSOLU]

Message par benjarobin » mar. 09 janv. 2018, 22:47

Le wiki indique cette règle (ou d'autres, mais elles ont tous le même défaut) :

Code : Tout sélectionner

SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/usr/bin/synclient TouchpadOff=1"
Ce qui me choque c'est cette partie

Code : Tout sélectionner

ENV{XAUTHORITY}="/home/username/.Xauthority"
qui en effet nécessaire, car on lance en plus en root synclient, en lui disant de se connecter au Xorg de tel utilisateur... Désolé c'est franchement moche
Zsh | KDE | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)

Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10490
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [script shell] ajouter des options.?? [RÉSOLU]

Message par FoolEcho » mer. 10 janv. 2018, 18:39

Je n'avais pas regardé le détail du wiki. *shrug*
«The following statement is not true. The previous statement is true.» :nage:

Répondre