#51 Le 27/02/2023, à 22:20
- lynn
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
Si j'enlève la première boucle et que je mets le lancement du script dans un crontab avec vérification toutes les secondes, que se passe t-il quand on rentre dans la deuxième ou la troisième boucle ? Le script sera relancé quand même ?
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#52 Le 27/02/2023, à 22:27
- Tawal
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
(ou autre systemctl périodique)
+1, j'utilise désormais les timer
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#53 Le 27/02/2023, à 22:31
- Watael
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
il y a moyen de vérifier qu'une instance du script est en cours.
soit en vérifiant l'existence d'un fichier .pid (je ne sais plus où sous /var/ je crois) créé au début et détruit à la fin du script.
soit avec un pgrep précédant l'appel du script sur la ligne de commande de la crontab
soit... ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#54 Le 28/02/2023, à 00:13
- Watael
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
tu peux nous expliquer davantage le fonctionnement d'"itérations" et sa raison d'être ? le nom ne m'aide pas, c'est comme une variable qu'on nommerais var.
cette variable est incrémentée si le téléphone n'est pas connecté, mais dans cette condition le script fait la connexion avec le téléphone.
et quand elle dépasse un seuil, le script entre dans une nouvelle boucle.
l'incrémentation ne devrait-elle pas être conditionnée à la réussite de blutoothctl connect $mac ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#55 Le 28/02/2023, à 00:36
- lynn
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
J'avais mis un nombre d'essai avant le passage dans la boucle du compte à rebours car pendant un moment mon bluetooth se déconnectait de temps en temps puis revenait pratiquement tout de suite sans raison apparente, donc au cas ou ça arrive encore, javais préféré ajouté un petit délai. Mais c'est vrai qu'on peut virer cette boucle. Sur une connexion stable, elle ne sert pas à grand chose.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#56 Le 28/02/2023, à 00:52
- lynn
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
Script mis à jour en enlevant la partie boucle "iterations".
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#57 Le 28/02/2023, à 16:40
- Watael
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
on continue
:
grep -xq plutôt que grep -q(o)w ?
-x, --line-regexp
Select only those matches that exactly match the whole line.[...]
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#58 Le 28/02/2023, à 18:05
- lynn
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
Bon, j'ai un problème avec cette commande
isScreenLocked() {
local XDG_SESSION_ID=${XDG_SESSION_ID:-$(loginctl list-sessions --no-legend | awk -v user=$LOGNAME '$3==user{print $1}')}
readarray -t properties < <(loginctl show-session $XDG_SESSION_ID --value -p State -p Type -p Remote -p LockedHint)
read remote type state locked < <(printf '%s ' "${properties[@]}")
[[ $remote == no && $state == active && $type == @(x11|wayland) && $locked == no ]]
}
Lancée dans un terminal puis récup des valeurs
isScreenLocked ; echo "remote = $remote; state = $state; type = $type; locked = $locked"
me renvoie ça
remote = no; state = active; type = wayland; locked = no yes tty active no
Y a pas des éléments en trop ?
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#59 Le 28/02/2023, à 18:24
- Watael
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
que dit
loginctl show-session $XDG_SESSION_ID --value -p State -p Type -p Remote -p LockedHint
avec XDG_SESSION_ID assigné à loginctl list-sessions --no-legend | awk -v user=$LOGNAME '$3==user{print $1}'.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#60 Le 28/02/2023, à 18:35
- lynn
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
loginctl list-sessions --no-legend | awk -v user=$LOGNAME '$3==user{print $1}'
2
loginctl show-session 2 --value -p State -p Type -p Remote -p LockedHint
no
wayland
active
no
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#61 Le 28/02/2023, à 18:48
- lynn
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
Apparemment, ça fait ça si on ouvre un tty...
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#62 Le 28/02/2023, à 19:22
- Watael
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
je ne vois pas.
comme ça :
set -x ; isScreenLocked; echo "remote = $remote; state = $state; type = $type; locked = $locked"; set +x
on verra le déroulement des actions.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#63 Le 28/02/2023, à 19:26
- lynn
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
set -x ; isScreenLocked; echo "remote = $remote; state = $state; type = $type; locked = $locked"; set +x
+ isScreenLocked
++ loginctl list-sessions --no-legend
++ awk -v user=lynn '$3==user{print $1}'
+ local 'XDG_SESSION_ID=2
39
40'
+ readarray -t properties
++ loginctl show-session 2 39 40 --value -p State -p Type -p Remote -p LockedHint
+ read remote type state locked
++ printf '%s ' no wayland active no '' no tty online no '' no tty online no
+ [[ no == no ]]
+ [[ active == active ]]
+ [[ wayland == @(x11|wayland) ]]
+ [[ no no tty online no no tty online no == no ]]
+ echo 'remote = no; state = active; type = wayland; locked = no no tty online no no tty online no'
remote = no; state = active; type = wayland; locked = no no tty online no no tty online no
+ set +x
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#64 Le 28/02/2023, à 19:31
- Watael
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
il y a plusieurs sessions à ton nom : 2, 39, et 40
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#65 Le 28/02/2023, à 19:41
- lynn
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
Le 2 c'est la session graphique et les autres, des TTY ouverts (tty2 et tty3). La question, c'est de savoir comment trouver le bon à coup sûr..!? À priori, sous Ubuntu c'est le TTY2 qui a la session graphique mais sur une autre distribution voire même une variante d'Ubuntu, il est possible que ça varie.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#66 Le 28/02/2023, à 19:47
- lynn
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
La commande
loginctl user-status
me renvoie ça
lynn (1000)
Since: Tue 2023-02-28 15:41:06 CET; 4h 2min ago
State: active
Sessions: 40 39 *2
Linger: no
On voit que la session graphique est marquée, c'est un bon début...
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#67 Le 28/02/2023, à 19:52
- lynn
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
Avec cette commande, ça donne le résultat, mais bon, est-ce la bonne façon de faire..?
loginctl user-status | awk -F\* '/Sessions:/{print $2;exit}'
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#68 Le 28/02/2023, à 20:53
- Watael
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
loginctl list-sessions --no-legend | awk -v user=$LOGNAME '$3==user && $5~"wayland|x11"{print $1}'
et on peut se dispenser du test sur type
isScreenLocked() {
local XDG_SESSION_ID=$(loginctl list-sessions --no-legend | awk -v user=$LOGNAME '$3==user&&$5~"wayland|x11"{print $1}')
if test -n "$XDG_SESSION_ID"
then
readarray -t properties < <(loginctl show-session $XDG_SESSION_ID --value -p State -p Type -p Remote -p LockedHint)
read remote type state locked < <(printf '%s ' "${properties[@]}")
[[ $remote == no && $state == active && $locked == no ]]
else
>&2 echo "not in graphic session; quitting."
exit 1
fi
}
?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#69 Le 28/02/2023, à 21:02
- lynn
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
loginctl list-sessions --no-legend | awk -v user=$LOGNAME '$3==user && $5~"wayland|x11"{print $1}'
ne renvoie rien, par conséquent le lancement de la fonction fait quitter le terminal.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#70 Le 28/02/2023, à 21:16
- Watael
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
mais pourquoi ?
que dit loginctl list-sessions --no-legend ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#71 Le 28/02/2023, à 22:43
- lynn
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
2 1000 lynn seat0 tty2
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#72 Le 01/03/2023, à 01:28
- Watael
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
mais parfois, il y a plus de sessions.
c'est ce que montre
remote = no; state = active; type = wayland; locked = no no tty online no no tty online no
plus proprement
remote = no; state = active; type = wayland; locked = no
no tty online no
no tty online no
qu'est-ce qui a changé ?
quand loginctl list-sessions --no-legend montre
2 1000 lynn seat0 tty2
tu es en session graphique ? connecté via gdm ?
pour loginctl user-status (c'est peut-être plus fiable), je ferais plutôt une boucle sur les champs de la ligne "Sessions" :
$ loginctl user-status | awk '/^\s+Sessions/{for(i=1;i<=NF;i++)if($i~"^*")print substr($i,2)}'
est-on sûr que la session active sera toujours la dernière de la ligne "Sessions" ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#73 Le 01/03/2023, à 15:30
- lynn
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
tu es en session graphique ? connecté via gdm ?
Session graphique, oui et avec GDM. Un Ubuntu de base en somme.
est-on sûr que la session active sera toujours la dernière de la ligne "Sessions" ?
Ça je ne sais pas... je constate juste l'étoile (*) à côté du chiffre qui correspond à la session graphique.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#74 Le 01/03/2023, à 16:44
- Watael
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
la commande gawk indiquée ne tient pas compte de la position de l'information : elle ne retient que le champ qui commence par un astérisque.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#75 Le 04/03/2023, à 17:57
- lynn
Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth
J'ai modifié le script dans mon premier message. Désormais, il se contentera de vérifier (une fois) les conditions d'exécution de connexion (appairage, mode avion à désactivé et activer le bluetooth). Si tout est bon, la connexion smartphone/pc se fera automatiquement.
Le reste du script agira seulement en fonction du statut de la connexion bluetooth et l'état du verrouillage de l'écran. J'ai constaté que si la connexion smartphone/pc s'est faite une fois, le fait de perdre puis de retrouver le bluetooth, sur son smartphone ou sur son pc, fait se reconnecter les deux éléments.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne