[XRANDR]Basculer d'un ecran a un autre -Script-(Re en cours)

Reconnaissance et configuration du matériel / kernel linux
Répondre
Avatar de l’utilisateur
ed0c
Chu Ko Nu
Messages : 329
Inscription : mer. 24 mars 2010, 10:02

[XRANDR]Basculer d'un ecran a un autre -Script-(Re en cours)

Message par ed0c »

Bonjour à tous,
Je suis possesseur d'un netbook, et ayant un ecran vga a disposition, je profite de celui ci pour regarder mes films.
Seulement voila, l'utilisation de lxrandr est un peu fastidieuse (oui ok c'est trois click, mais c'est trois click de trop) surtout parce qu'il faut penser a switcher d'ecran avant de débrancher le vga (et comme je ne pense a rien en ce moment, ça m'énerve). Etant sous kde j'ai aussi tenté via le gestionnaire de moniteurs de regler mon probleme (plutot pas tres pratique je trouve)
Donc je me posais la question : est ce que vous connaissez un ptit script basique a base de xrandr de if de then et de else me permettant de basculer en une touche vers le vga quand celui ci est connecté, et vers l'écran natif du netbook lorsque le vga est débranché.
Ou encore mieux : Je branche le vga, et bim! mon ecran de netbook s'eteint et le vga prends le relais. Je le débranche et bim! ça reviens sur le netbook.
(ce serait l'idéal a vrai dire....)

Merci d'avance !
Dernière modification par ed0c le jeu. 12 mai 2011, 17:44, modifié 2 fois.
Avatar de l’utilisateur
hansi
Elfe
Messages : 508
Inscription : ven. 08 oct. 2010, 21:11

Re: [XRANDR]Basculer d'un ecran a un autre en 1 touche(en co

Message par hansi »

Salut,

Alors rien qu'avec une touche ça risque d'être chaud à moins que tu n'aies un clavier de gamer ; mais avec une combinaison de touches, tu devrais pouvoir trouver ton bonheur sur cette page.
Combattu souvent, battu parfois, abattu jamais ! (François de Charette)
Avatar de l’utilisateur
ed0c
Chu Ko Nu
Messages : 329
Inscription : mer. 24 mars 2010, 10:02

Re: [XRANDR]Basculer d'un ecran a un autre en 1 touche(en co

Message par ed0c »

Oui je viens juste de lire ça... mais c'est pas vraiment ce que je recherche. (Merci tout de meme !)
Je suis tombé sur le wiki et c'est a peu pres le genre de script que je cherche. Hormis le fait que le script permet un mode "clone".
Vous savez comment le modifier afin de ne pouvoir avoir qu'un seul ecran de visible?
J'ai essayé de le modifier sans succes...J'avoue etre une vrai bille en programmation.. :D

Code : Tout sélectionner

#!/bin/bash
#
# This script toggles the extended monitor outputs if something is connected
#

# your notebook monitor
DEFAULT_OUTPUT='LVDS1'

# outputs to toggle if connected
OUTPUTS='VGA1'

# get info from xrandr
XRANDR=`xrandr`

EXECUTE=""

for CURRENT in $OUTPUTS
do
        if [[ $XRANDR == *$CURRENT\ connected*  ]] # is connected
        then
                if [[ $XRANDR == *$CURRENT\ connected\ \(* ]] # is disabled
                then
                        EXECUTE+="--output $CURRENT --auto --above $DEFAULT_OUTPUT "
                else
                        EXECUTE+="--output $CURRENT --off "
                fi
        else # make sure disconnected outputs are off 
                EXECUTE+="--output $CURRENT --off "
        fi
done

xrandr --output $DEFAULT_OUTPUT --auto $EXECUTE
Avatar de l’utilisateur
hansi
Elfe
Messages : 508
Inscription : ven. 08 oct. 2010, 21:11

Re: [XRANDR]Basculer d'un ecran a un autre en 1 touche(en co

Message par hansi »

Déjà peux-tu poster la sortie de la commande "$ xrandr" ?

Edit : Essayes avec ça, il faut modifier EXTERNAL/INTERNAL_OUTPUT en fonction de ce qui ressort de la commande précédente.

Code : Tout sélectionner

#!/bin/bash

EXTERNAL_OUTPUT="VGA"
INTERNAL_OUTPUT="LVDS"
 
xrandr | grep $EXTERNAL_OUTPUT | grep " connected "

if [ $? -eq 0 ]; then
    xrandr --output $INTERNAL_OUTPUT --off --output $EXTERNAL_OUTPUT --auto
else
    xrandr --output $INTERNAL_OUTPUT --auto --output $EXTERNAL_OUTPUT --off
fi
Combattu souvent, battu parfois, abattu jamais ! (François de Charette)
Avatar de l’utilisateur
ed0c
Chu Ko Nu
Messages : 329
Inscription : mer. 24 mars 2010, 10:02

Re: [XRANDR]Basculer d'un ecran a un autre en 1 touche(en co

Message par ed0c »

Superbe !!! Merci hansi!
Exactement ce que je recherchais...!
[Partisan du moindre effort]Par hasard, tu ne connaîtrais pas un moyen pour appliquer ce script lorsque je branche mon cable VGA ce script s'applique automatiquement, et que losrque je le débranche, il se réapplique a nouveau..?[/Partisan du moindre effort]


Edit: Petite question de culture G. J'ai compris les quelques lignes de code bash que tu as écris, hormis cette partie:

Code : Tout sélectionner

if [ $? -eq 0 ]; then
Je comprends bien ce que ça veut dire par la suite du code: en gros, si l'ecran externe est branché, il exécute la commande permettant la bascule vers celui-ci et inversement... dans le cas inverse (pas tres français tout ça)
Je croiS comprendre aussi que la suite de caractères $? fait appel au résultat de la commande précédente, et que le "-eq 0" signifie "égal 0". Mais si c'est cela, la logique voudrait que 0 signifie "pas de résultat à la commande précédente". Hors la suite des événements semble indiquer le contraire.
(Ok c'est con comme question, mais je n'ai aucune base de programmation et je suis curieux)
Avatar de l’utilisateur
jaco
Chu Ko Nu
Messages : 344
Inscription : ven. 18 mars 2011, 23:42
Localisation : Toulouse, France

Re: [XRANDR]Basculer d'un ecran a un autre en 2 touches (Rés

Message par jaco »

Sous Unix, une commande qui se termine correctement est censée renvoyer 0.

Code : Tout sélectionner

$ ls 
(...)
$ echo $?
0
$ ls machin
ls: machin: No such file or directory
$ echo $?
1
Avatar de l’utilisateur
ed0c
Chu Ko Nu
Messages : 329
Inscription : mer. 24 mars 2010, 10:02

Re: [XRANDR]Basculer d'un ecran a un autre en 2 touche(en co

Message par ed0c »

C'est bizarre ton script marche tres bien dans le terminal, mais lorsque je l'affecte a une touche, il ne veut pas fonctionner. Mais ce n'est pas grave, j'ai un peu étudié la chose, et j'ai légerement le script que j'avais récupéré sur le wiki :

Code : Tout sélectionner

#!/bin/bash
#
# This script toggles the extended monitor outputs if something is connected
#

# your notebook monitor
DEFAULT_OUTPUT='LVDS1'

# outputs to toggle if connected
OUTPUTS='VGA1'

# get info from xrandr
XRANDR=`xrandr`

EXECUTE=""

for CURRENT in $OUTPUTS
do
        if [[ $XRANDR == *$CURRENT\ connected*  ]] # is connected
        then
                if [[ $XRANDR == *$CURRENT\ connected\ \(* ]] # is disabled
                then
                        EXECUTE+="--output $CURRENT --auto --output $DEFAULT_OUTPUT  --off "
                else
                        EXECUTE+="--output $CURRENT --above $DEFAULT_OUTPUT"
		fi
        else # make sure disconnected outputs are off 
                EXECUTE+="--output $CURRENT --off "
        fi
done

xrandr --output $DEFAULT_OUTPUT --auto $EXECUTE
Ca me permet en lancant le script une fois de basculer sur l'autre écran, la deuxieme fois, de basculer en mode clone, et lorsqu'il est débranché de revenir sur l'ecran du netbook.
Je me suis rendu compte qu'il n'était pas possible d'inclure des "else" indéfiniment.
Par exemple :

Code : Tout sélectionner

     if [[ $XRANDR == *$CURRENT\ connected\ \(* ]] # is disabled
                then
                        EXECUTE+="--output $CURRENT --auto --output $DEFAULT_OUTPUT  --off "
                else
                        EXECUTE+="--output $CURRENT --above $DEFAULT_OUTPUT"
                else 
                        EXECUTE+="--output $CURRENT --off "
		fi
ça, ça ne fonctionne pas :D . C'est con, vu que ça aurait été pas mal de passer en "VGA1 seul"/clone/"LVDS1 seul" en une touche, que le VGA soit ou non connecté.

Des idées peut etre?
Avatar de l’utilisateur
hansi
Elfe
Messages : 508
Inscription : ven. 08 oct. 2010, 21:11

Re: [XRANDR]Basculer d'un ecran a un autre en 2 touches (Rés

Message par hansi »

Alors pour un changement automatique au branchement il faut jouer avec l'ACPI et ça dépend vraiment du modèle du portable donc je ne sais vraiment pas comment faire si tu n'as pas un Thinkpad...

Je ne suis pas l'auteur du script j'ai juste adapté celui de Thinkwiki à ton cas... et comme j'y connais rien en bash vaut mieux que tu regarde dans la doc ou que quelqu'un qui s'y connait réponde à ta question :lol:

Edit : et si tu remplace le deuxième else par elif ?
Combattu souvent, battu parfois, abattu jamais ! (François de Charette)
Avatar de l’utilisateur
ed0c
Chu Ko Nu
Messages : 329
Inscription : mer. 24 mars 2010, 10:02

Re: [XRANDR]Basculer d'un ecran a un autre en 2 touches (Rés

Message par ed0c »

jaco a écrit :Sous Unix, une commande qui se termine correctement est censée renvoyer 0.
Merci Jaco! Pas tres logique si je peux me permettre tout ça. :D
Bon ça me rassure j'avais compris le script...
Avatar de l’utilisateur
ed0c
Chu Ko Nu
Messages : 329
Inscription : mer. 24 mars 2010, 10:02

Re: [XRANDR]Basculer d'un ecran a un autre en 2 touches (Rés

Message par ed0c »

hansi a écrit : Edit : et si tu remplace le deuxième else par elif ?
Non ça ne marche pas..
je pense que le script devrait etre construit en

Code : Tout sélectionner

1--> si le VGA1 est connecté, basculer en VGA1
       1'--> si 1 a été effectué, basculer en clone
       1''--> si 1' a été effectué, basculer sur l'écran du LVDS1
2--> si le VGA1 est déconnecté, basculer sur LVDS1
Le truc c'est que je ne sais pas mettre ça en code...
Merci pour ton aide hansi!
Si quelqu'un veut bien m'aider... Merci d'avance !
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17624
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [XRANDR]Basculer d'un ecran a un autre -Script-(Re en co

Message par benjarobin »

Pour faire ta condition tu vas être obligé de passer par un fichier temporaire (placé dans /tmp/) pour te souvenir de l'état précédent.
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
ed0c
Chu Ko Nu
Messages : 329
Inscription : mer. 24 mars 2010, 10:02

Re: [XRANDR]Basculer d'un ecran a un autre -Script-(Re en co

Message par ed0c »

C'est ce que je pense (mais si je ne vois pas comment), mais pourquoi dans ce cas le script que j'utilise plus haut me fait :
1 --> basculer vers VGA1
2 --> basculer en mode clone
Ceci, sans fichier dans tmp...
Répondre