Page 1 sur 2
[awesomewm]Extension screenful
Publié : ven. 06 avr. 2012, 17:12
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 :
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 !
Re: [awesomewm]Extension screenful
Publié : ven. 06 avr. 2012, 17:25
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.

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...
Re: [awesomewm]Extension screenful
Publié : ven. 06 avr. 2012, 17:30
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...
Re: [awesomewm]Extension screenful
Publié : sam. 07 avr. 2012, 12:40
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...
Re: [awesomewm]Extension screenful
Publié : lun. 09 avr. 2012, 01:40
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.
Re: [awesomewm]Extension screenful
Publié : mar. 15 mai 2012, 23:57
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.
Re: [awesomewm]Extension screenful
Publié : mer. 16 mai 2012, 11:45
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.
Re: [awesomewm]Extension screenful
Publié : mer. 16 mai 2012, 16:26
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.
Re: [awesomewm]Extension screenful
Publié : mer. 16 mai 2012, 17:49
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)?
Re: [awesomewm]Extension screenful
Publié : mer. 16 mai 2012, 20:45
par GuilouV
En lua l'intégration aurait été parfaite, maintenant peu importe les moyens pourvu que ça fonctionne

Re: [awesomewm]Extension screenful
Publié : jeu. 17 mai 2012, 19:53
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.
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.
Re: [awesomewm]Extension screenful
Publié : ven. 18 mai 2012, 00:31
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?
Re: [awesomewm]Extension screenful
Publié : ven. 18 mai 2012, 01:10
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.
Re: [awesomewm]Extension screenful
Publié : ven. 18 mai 2012, 16:27
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)
Re: [awesomewm]Extension screenful
Publié : ven. 18 mai 2012, 17:26
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.
Re: [awesomewm]Extension screenful
Publié : ven. 18 mai 2012, 17:40
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).
Re: [awesomewm]Extension screenful
Publié : ven. 18 mai 2012, 18:02
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
.
Re: [awesomewm]Extension screenful
Publié : jeu. 24 mai 2012, 11:30
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 :
Tu as bien ces mêmes valeurs ?
Re: [awesomewm]Extension screenful
Publié : jeu. 24 mai 2012, 17:33
par GuilouV
Les droits de mon script sont -rwxrwxrwx
Re: [awesomewm]Extension screenful
Publié : jeu. 31 mai 2012, 00:19
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 :
à supposer que ta clé soit détectée comme une sdb.
script.sh
et regarde le contenu de /tmp/test.
Désolé je suis un peu lent pour les réponses en ce moment…