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.

#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

Watael a écrit :

(ou autre systemctl périodique)

+1, j'utilise désormais les timer wink


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

hmm

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.

En 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. mad
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. hmm
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.

En 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 smile
:
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.

En 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.

En 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.

En 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.

En 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

loginctl user-status a écrit :

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.

En 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.

En 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.

En ligne

#73 Le 01/03/2023, à 15:30

lynn

Re : [ Script bash ] Verrouiller son écran en utilisant le bluetooth

Watael a écrit :

tu es en session graphique ? connecté via gdm ?

Session graphique, oui et avec GDM. Un Ubuntu de base en somme.

Watael a écrit :

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.

En 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