[awesomewm]Extension screenful

Xorg, Compiz, KDE / Gnome / Xfce / Fluxbox / e17 / fvwm ... GDM/KDM/XDM...
Avatar de l’utilisateur
GuilouV
Elfe
Messages : 539
Inscription : jeu. 25 nov. 2010, 15:34

[awesomewm]Extension screenful

Message par GuilouV »

Bonjour à tous,

Ne cessant jamais de profiter des énormes possibilités de personnalisation de Arch je me retrouve aujourd'hui confronté à un petit souci que je ne parviens pas à résoudre avec mes minces connaissances et l'ami google ne m'a pas été d'une aide conséquente. Le souci qui m'amène aujourd'hui concerne le WM awesome et plus particulièrement l'utilisation d'une extension nouvellement développée et nommée screenful (https://github.com/dluksza/screenful). Le principe est de pouvoir permettre à awesome de détecter automatiquement la connexion ou déconnexion d'un écran ce qui m'éviterai d'utiliser manuellement les commandes xrandr que j'utilise jusque là à chaque fois que j'utilise un second moniteur.

Sur le lien précédent vous trouverez une descritpion du projet mais surtout les fichiers de configurations. N'étant pas convaincu des EDID de mes moniteurs (obtenus par read-edid ou xrandr --prop) j'ai tenté de lancer le fichier notify-awesome du projet puisqu'il permet d'alerter awesome en conséquence de mes écrans connectés ou non. Or lorsque j'exécute ce fichier je me retrouve avec l'erreur :

Code : Tout sélectionner

standard in must be a tty
La solution google de modifier mon sudoers n'a pas eu d'effet et en décorticant il me semble que la commande de ce script qui pose problème est "notify" (à la fin du script). Sans cette commande je n'ai plus d'erreur mais évidemment awesome ne réagit pas à mes écrans.

La question est donc (désolé pour le pavé mais j'ai tenté d'être assez clair pour ce problème particulier) : comment faire fonctionner l'extension screenful avec awesomewm ? Si le problème réside bien dans la fonction notify, y'a-t-il un moyen d'y remédier ?

Merci à vous et bonne journée !
[ Vaio S (VJS131X0211B) ]==[ Arch64 i3 Bépo ]==[ KISS spirit ]
Avatar de l’utilisateur
Rolinh
Chu Ko Nu
Messages : 392
Inscription : sam. 15 août 2009, 09:15
Localisation : Suisse

Re: [awesomewm]Extension screenful

Message par Rolinh »

Salut,

moi je l'ai toujours fait à la main. Enfin, pas exactement: j'ai un script pour écran seul et un autre pour quand mon deuxième écran est connecté pour ce qui est de faire le réglage manuellement.
Sinon, j'ai mis ça dans mon .xinitrc:

Code : Tout sélectionner

# apply dual-screen configuration when VGA is connected
xrandr | grep "VGA1 connected"
if [ $? -eq 0 ]; then
        xrandr --output LVDS1 --mode 1600x900 --pos 0x0 --rotate normal --output VGA1 --mode 1280x1024 --pos 1600x0 --rotate normal
fi
Enfin bon, cela ne résout pas vraiment ton problème. :P Et d'ailleurs, cette extension m'intéresse.

J'aimerais bien tester le truc mais malheureusement, je n'ai pas de moniteur à disposition en ce moment. En revanche, je ne vois absolument pas pourquoi il faudrait toucher au sudoers!

Enfin, de mon point de vue, je ne vois pas pourquoi il y aurait besoin de faire un su dans le script...
Avatar de l’utilisateur
GuilouV
Elfe
Messages : 539
Inscription : jeu. 25 nov. 2010, 15:34

Re: [awesomewm]Extension screenful

Message par GuilouV »

Merci de ta réponse.

J'utilise pour le moment exactement le même .xinitrc ^^ et idem pour les raccourcis vers des scripts lorsque je branche un écran. Mais comme tu l'as remarqué le but ici est d'automatiser tout ça, histoire de laisser Arch en faire encore plus et nous encore moins :p

Sinon pour le su dans le script de notify-awesome je suis d'accord je n'ai pas vraiment compris l'intérêt. M'enfin avec ou sans il semblerait que ce soit la commande notify finale qui pose souci...
[ Vaio S (VJS131X0211B) ]==[ Arch64 i3 Bépo ]==[ KISS spirit ]
Avatar de l’utilisateur
Rolinh
Chu Ko Nu
Messages : 392
Inscription : sam. 15 août 2009, 09:15
Localisation : Suisse

Re: [awesomewm]Extension screenful

Message par Rolinh »

GuilouV a écrit :M'enfin avec ou sans il semblerait que ce soit la commande notify finale qui pose souci...
Bah si tu regardes bien le script:

Code : Tout sélectionner

#! /bin/sh

USER='lock'

function notify() {
su $USER -c "export DISPLAY=':0.0'; \
export XAUTHORITY='/home/$USER/.Xauthority'; \
echo 'updateScreens(\"$1\")' | awesome-client"
}

notify $1 &
notify c'est simplement la fonction qu'il vient de définir qui fait appel à su ;)
Et faudra que l'on m'explique l'intérêt de définir $USER en dur plutôt que de d'abord tester la variable d'environnement...
Avatar de l’utilisateur
GuilouV
Elfe
Messages : 539
Inscription : jeu. 25 nov. 2010, 15:34

Re: [awesomewm]Extension screenful

Message par GuilouV »

Bon en attendanrt ça ne fonctionne toujours pas et il semblerait que personne n'utilise cette extension ou bien alors elle fonctionne ailleurs... Je continuerai de jeter un oeil attentif si une réponse venait.
[ Vaio S (VJS131X0211B) ]==[ Arch64 i3 Bépo ]==[ KISS spirit ]
Avatar de l’utilisateur
GuilouV
Elfe
Messages : 539
Inscription : jeu. 25 nov. 2010, 15:34

Re: [awesomewm]Extension screenful

Message par GuilouV »

Je me permet de faire remonter ce post un peu oublié pour savoir si quelqu'un a tenté l'aventure… d'autant que le projet a été modifié depuis peu.
[ Vaio S (VJS131X0211B) ]==[ Arch64 i3 Bépo ]==[ KISS spirit ]
Avatar de l’utilisateur
MrMen
Chu Ko Nu
Messages : 479
Inscription : sam. 11 juil. 2009, 14:33
Localisation : (33)

Re: [awesomewm]Extension screenful

Message par MrMen »

Bonjour, je viens de tester ce bout de lua, et idem chez moi ça ne marche pas du tout. Par contre je viens de penser à un truc. Je ne suis pas très callé en udev, mais on peut créer des règles qui lance un script ou une fonction non ? Dans ce cas c'est pas trop dûr à faire je pense.

Bon bien sûr, tu réinventes la roue puisque le mec propose un script, mais ça peut marcher. J'ai pas le temps de trop chercher là, mais j'essaie de regarder dans la soirée ou demain.

Sinon question subsidiaire : comment tu récupères tes edid ? Dans xrandr --prop tu choisis quoi dans la liste ?

Edit : j'ai pas tenu, j'ai jeté un oeil, et il utilise bien l'exécution d'un programme à partir d'udev. Donc je vais voir ce que je peux faire.
Arch 64 | Awesome | Zsh | Bépo
Avatar de l’utilisateur
GuilouV
Elfe
Messages : 539
Inscription : jeu. 25 nov. 2010, 15:34

Re: [awesomewm]Extension screenful

Message par GuilouV »

Avec xrandr c'était un peu "crado" je convertissais l'EDID en hexadecimal. En fait c'était surtout pour comparer avec read-edid car n'ayant jamais eu besoin de l'edid de mes écrans je voulais juste être sûr de ce que j'obtenais.
Après j'avais tenté rapidement des trucs avec udev mais ne l'ayant jamais utilisé je ne suis parvenu à rien (quand je dis utilisé c'est coder un truc parce que bien sûr comme tout le monde je l'utilise "inconsciemment"). Donc si jamais tu trouvais une solution je serai ravi de la connaître et on pourrait peut être à postériori en faire profiter l'auteur du scripts.
[ Vaio S (VJS131X0211B) ]==[ Arch64 i3 Bépo ]==[ KISS spirit ]
Avatar de l’utilisateur
MrMen
Chu Ko Nu
Messages : 479
Inscription : sam. 11 juil. 2009, 14:33
Localisation : (33)

Re: [awesomewm]Extension screenful

Message par MrMen »

Bon c'est pas grand chose mais je trouve ça sur le net :
http://finalrewind.org/interblag/entry/ ... ev-xrandr/
Par chance je suis sur mon portable et pas moyen de tester ! (pas de deuxième écran).

En tout cas je viens de me faire une règle udev pour la détection de ma clés usb (à défaut de deuxième écran) et je réussi bien à lancer un script (echo "blabla" > /tmp/out).

Je vais aller voir ce que donne le lua maintenant puisque je ne peux pas tester, je vais aller voir cette histoire de tty.

Edit : petite question, tu veux vraiment du lua ou alors on peut faire ça en restant avec du bash (que tu mets dans .config/awesome ni vu ni connu)?
Arch 64 | Awesome | Zsh | Bépo
Avatar de l’utilisateur
GuilouV
Elfe
Messages : 539
Inscription : jeu. 25 nov. 2010, 15:34

Re: [awesomewm]Extension screenful

Message par GuilouV »

En lua l'intégration aurait été parfaite, maintenant peu importe les moyens pourvu que ça fonctionne :wink:
[ Vaio S (VJS131X0211B) ]==[ Arch64 i3 Bépo ]==[ KISS spirit ]
Avatar de l’utilisateur
MrMen
Chu Ko Nu
Messages : 479
Inscription : sam. 11 juil. 2009, 14:33
Localisation : (33)

Re: [awesomewm]Extension screenful

Message par MrMen »

Bon il va falloir continuer à bosser dessus mais je te file une version qui semble marcher pour le moment.
De nombreux passages sont à revoir, mais c'est histoire d'avoir un squelette qui s'adapte à plusieurs config.

Pour le moment je pense avoir des problèmes si ta sortie principale n'est pas LVDS-1, et si tu branches plusieurs écrans (plus de 2). Donc pour le moment ça fait un petit boulot.
La règle udev ne change pas si ce n'est le script à la fin.

Code : Tout sélectionner

SUBSYSTEM=="drm", ACTION=="change", RUN+="/tmp/script.sh"
Pour que ça fonctionne pour le moment, je fais un chmod 777 sur le script : je n'ai pas encore chercher quel droit donner. Je crois que parfois ça plante à l'utilisation, et je rentre mon user en dûr moi… (pas top)

Je te laisse lire tout ça et me dire ce que tu en penses.
Attention : c'est juste un bout de code pourri, il y a plein de connerie pour le moment.

Mon login est en dûr, mais tu peux faire une variable user pour que ce soit plus cool.

Code : Tout sélectionner

#!/bin/bash

LOG=detect-screen.log

# ???
# modify 
export XAUTHORITY=/home/mrmen/.Xauthority
export DISPLAY=:0

if [ -e /tmp/$LOG ]
then
    rm /tmp/$LOG
fi
touch /tmp/$LOG
cd /tmp

echo "$(date)"" : something happened with your monitors" >> $LOG
output=$(ls /sys/class/drm | sed '/card.*-/!d; /.*LVDS.*/d')
echo "available output are : "$output >> $LOG

# get what output to use
for i in $output
do
    if [ "$(cat /sys/class/class/drm/$i/status)"=="connected" ]
    then
	valid=$i
	# TODO
	# find a method to exit if a valid one has been found
    fi	
done

# put a nice name into valid
valid=$(echo $valid | sed 's/card.-//g')

echo "a valid output has been found : "$valid". If it is not true, please modify something ;)" >> $LOG

# activate if needed
echo "executing : xrandr --output $valid --auto --left-of LVDS-1" >> $LOG
xrandr --output $valid --auto --left-of LVDS-1 --verbose > /tmp/what

exit 0
Edit : bon mon su mrmen ne sert à rien ça vient de marcher sans, j'avais dû faire une connerie… je le sors du script.
Arch 64 | Awesome | Zsh | Bépo
Avatar de l’utilisateur
GuilouV
Elfe
Messages : 539
Inscription : jeu. 25 nov. 2010, 15:34

Re: [awesomewm]Extension screenful

Message par GuilouV »

Après un rapide test il m'a fallu ajouter une commande sed pour supprimer le tiret de VGA-1 sans quoi la commande xrandr ne fonctionnait pas.

Code : Tout sélectionner

# put a nice name into valid
valid=$(echo $valid | sed 's/card.-//g')
valid=$(echo $valid | sed 's/-//g')
Et pour un retour à un seul écran lorsqu'aucune moniteur secondaire n'est branché j'ai aussi ajouté ceci (cf avant dernière ligne):

Code : Tout sélectionner

# get what output to use
for i in $output
do
    if [ "$(cat /sys/class/drm/$i/status)"=="connected" ]
    then
   valid=$i
   # TODO
   # find a method to exit if a valid one has been found
    fi
xrandr --output LVDS1 --mode 1280x800 --output HDMI1 --off --output VGA1 --off   
done
Par contre je suis obligé de lancer le script manuellement sans quoi udev ne semble pas le déclencher en réponse au branchement d'un second écran. Si tu as une idée pour automatiser ça?
[ Vaio S (VJS131X0211B) ]==[ Arch64 i3 Bépo ]==[ KISS spirit ]
Avatar de l’utilisateur
MrMen
Chu Ko Nu
Messages : 479
Inscription : sam. 11 juil. 2009, 14:33
Localisation : (33)

Re: [awesomewm]Extension screenful

Message par MrMen »

Je me doutais bien qu'il y aurait des problèmes sur les noms…
Par contre, je me dis que le plus simple sera de recouper la sortie de xrandr et cat /sys/class/drm pour avoir le bon nom de la sortie à utiliser : ça va vetre dûr de rajouter des sed à chaque fois qu'il y a un soucis. Surtout que la ligne que tu as été obligé d'ajouter moi elle me gène : ma sortie est DP-1 !

Pour le coup je me demandais comment faire pour repasser à un seul écran. Je faisais ça comme un bourrin : débranche et croise les doigts ! Content que tu ais trouvé quelquechose. Mais pour la ligne que tu as rajouté, on va avoir un problème quand même. Déjà on ne peut pas mettre en dûr le nom (si on veut un truc utilisable). Ensuite, comment savoir qui vient d'être débranché… pas évident. Et pour finir, elle est dans mon for… Donc à voir.
Je sens que ça va être un script maison où les options correspondront à nos besoins : ce sera plus simple

Pour le lancement, justement je me pose des questions. C'est la première fois que je mets les mains dans udev, donc je tatone. Je ne sais pas encore quel droit doit avoir le script pour qu'udev puisse le lancer. (x ?)
Tu as fait un chmod 777 les script pour voir ? Moi comme ça ça fonctionne : c'est automatique.

Je regarderais demain pour comprendre un peu mieux les droits, pour le moment dodo ;)

Sinon grande question : est-ce que ça te conviendrait un script comme ça ?

Edit : je viens de penser : tu as bien recharger les règles udev après avoir ajouté celle dont il est question plus haut ? sudo udevadm --reload-rules ou alors après ton reboot ce sera mis à jour.
Arch 64 | Awesome | Zsh | Bépo
Avatar de l’utilisateur
GuilouV
Elfe
Messages : 539
Inscription : jeu. 25 nov. 2010, 15:34

Re: [awesomewm]Extension screenful

Message par GuilouV »

Effectivement vu le probleme des noms de moniteur je pense qu'il faudra un script perso pour chacun.
Par contre pour le retour à un seul écran il suffit de rajouter un test comme pour la détection d'un écran connecté mais en vérifiant qu'aucun écran n'est connecté et alors dans ce cas seul LVDS1 (ou LVDS-1) sera configuré. Bon tout ceci est limité à l'utilisation d'un seul moniteur externe.

Enfin malheureusement un chmod 777 ne change rien et udev ne réagit pas seul (aucun log n'est crée au branchement d'un écran)
[ Vaio S (VJS131X0211B) ]==[ Arch64 i3 Bépo ]==[ KISS spirit ]
Avatar de l’utilisateur
MrMen
Chu Ko Nu
Messages : 479
Inscription : sam. 11 juil. 2009, 14:33
Localisation : (33)

Re: [awesomewm]Extension screenful

Message par MrMen »

J'ai fait des tests un peu dans la journée et j'ai peut être une idée. Tu utilises quoi comme pilote ? Parce que je viens de passer en nvidia-beta et drm n'est pas utilisé donc pas moyen d'utiliser ma règle udev : il faut prendre nouveau. (pas top pour l'autonomie)

Donc si tu as un driver pas «cool» ça ne va pas marcher. Je suis en train de chercher un moyen de détecter un nouvel écran avec udev pour les drivers type nvidia. Si tu sais (ou quelqu'un d'autre ;) ) ce qui se passe et où ça se passe pour un nouvel écran : ce serait cool !

@GuilouV: si tu n'as pas nouveau (driver nvidia), teste le si tu as le temps, ou au pire fait un cat /sys/class pour voir si tu as bien un répertoire drm.
Arch 64 | Awesome | Zsh | Bépo
Avatar de l’utilisateur
GuilouV
Elfe
Messages : 539
Inscription : jeu. 25 nov. 2010, 15:34

Re: [awesomewm]Extension screenful

Message par GuilouV »

J'ai bien un répertoire drm dans cat /sys/class ce qui n'est pas étonnant puisque, lancé en manuel, le script fonctionne.
Par contre côté pilote graphique j'utilise intel (carte intel oblige).
[ Vaio S (VJS131X0211B) ]==[ Arch64 i3 Bépo ]==[ KISS spirit ]
Avatar de l’utilisateur
MrMen
Chu Ko Nu
Messages : 479
Inscription : sam. 11 juil. 2009, 14:33
Localisation : (33)

Re: [awesomewm]Extension screenful

Message par MrMen »

J'avais oublié que ça avait bien fonctionné en le lançant tout seul… tu peux regarder dans les logs ce que te dis udev. Je pense que ça se trouve dans /var/log/errors.log.
Arch 64 | Awesome | Zsh | Bépo
Avatar de l’utilisateur
MrMen
Chu Ko Nu
Messages : 479
Inscription : sam. 11 juil. 2009, 14:33
Localisation : (33)

Re: [awesomewm]Extension screenful

Message par MrMen »

Bonjour,
Je viens de rejetter un oeil sur le script, et chez moi tout fonctionne avec le script suivant :

Code : Tout sélectionner

#!/bin/bash

LOG=detect-screen.log

# doing some stuff
export XAUTHORITY=/home/mrmen/.Xauthority
export DISPLAY=:0

touch /tmp/$LOG
cd /tmp

echo "$(date)"" : something happened with your monitors" >> $LOG
output=$(ls /sys/class/drm | sed '/card.*-/!d; /.*LVDS.*/d')
echo "available output are : "$output >> $LOG

# get what output to use
for i in $output
do
    if [ "$(cat /sys/class/class/drm/$i/status)"=="connected" ]
    then
	valid=$i
	# TODO
	# find a method to exit if a valid one has been found
    fi	
done

# turn all interface off
xrandr --output LVDS-1 --mode 1280x800 --output DP-1 --off


# put a nice name into valid
valid=$(echo $valid | sed 's/card.-//g')

echo "a valid output has been found : "$valid". If it is not true, please modify something ;)" >> $LOG

# activate if needed
echo "executing : xrandr --output $valid --auto --left-of LVDS-1" >> $LOG
xrandr --output $valid --auto --left-of LVDS-1 --verbose > /tmp/what

exit 0
et les droits suivants :

Code : Tout sélectionner

-rwxr-xr-x 1 mrmen mrmen 952 24 mai   11:29 script.sh*
Tu as bien ces mêmes valeurs ?
Arch 64 | Awesome | Zsh | Bépo
Avatar de l’utilisateur
GuilouV
Elfe
Messages : 539
Inscription : jeu. 25 nov. 2010, 15:34

Re: [awesomewm]Extension screenful

Message par GuilouV »

Les droits de mon script sont -rwxrwxrwx
[ Vaio S (VJS131X0211B) ]==[ Arch64 i3 Bépo ]==[ KISS spirit ]
Avatar de l’utilisateur
MrMen
Chu Ko Nu
Messages : 479
Inscription : sam. 11 juil. 2009, 14:33
Localisation : (33)

Re: [awesomewm]Extension screenful

Message par MrMen »

Bon donc il semble que ce soit au niveau de la détection que ça ne passe pas. Tu peux essayer de faire une règle udev pour la détection de clé usb qui lance un script de /tmp.
règle udev :

Code : Tout sélectionner

KERNEL=="sdb", RUN+="/tmp/script.sh"
à supposer que ta clé soit détectée comme une sdb.
script.sh

Code : Tout sélectionner

#!/bin/bash
echo "win"  > /tm/test
et regarde le contenu de /tmp/test.

Désolé je suis un peu lent pour les réponses en ce moment…
Arch 64 | Awesome | Zsh | Bépo
Répondre