Pages : 1
#1 Le 21/12/2013, à 19:42
- Compte supprimé
Un screen magnifier maison
J'ai posté une manière de disposer d'un screen magnifier facilement et rapidement sous linux. La solution est située ici :
fil sur handylinux
xrandr + xcalib
#2 Le 21/12/2013, à 20:25
- J5012
Re : Un screen magnifier maison
un dev gambas pourrait programmer cela : une interface qui "devinerait" les bonnes conditions et configurerait le bon ecran, on appelle ca de la programmation evenementielle (et ou conditionnelle) ...
Hors ligne
#3 Le 23/12/2013, à 23:20
- Compte supprimé
Re : Un screen magnifier maison
Salut
J'ai repris mon script de façon à le rendre utilisable. Voici la nouvelle version améliorée:
#!/bin/bash
# on obtient le nom de l'interface connectee
DEVICE=$(xrandr | grep " connected" | awk '{print $1}');
# on obtient la résolution
PANNING=$(xrandr | grep " connected" | awk '{print $3}' | cut -f1 -d+);
# Fichier de configuration
CONFIG="/tmp/.magnifier.conf";
SELECT_ZOOM(){
if [[ -f $CONFIG ]]; then
# Chargement du fichier de config
. $CONFIG
else
# zoom minimum
CURRENT_ZOOM=1;
fi
# Définition des niveaux de zoom
for level in 1 2 4 8 16
do
if test $level -eq $CURRENT_ZOOM; then
var="$(echo $var) TRUE $(echo $level)"
else
var="$(echo $var) FALSE $(echo $level)"
fi
done;
# On demande à l'utilisateur de choisir le zoom level
ZOOM_LEVEL=$(zenity --width=380 --height=260 --list --radiolist --title="Magnifier" --text="Choisir le niveau de zoom désiré" --column " x " --column "Zoom possible" $var)
if [[ $ZOOM_LEVEL != "1" && $ZOOM_LEVEL != CURRENT_ZOOM && $ZOOM_LEVEL != "" ]];then
# On calcul les nouvelles résolutions
WIDTH=$(echo $PANNING | cut -f1 -dx);
HEIGHT=$(echo $PANNING | cut -f2 -dx);
MODE_WIDTH=$(echo "$WIDTH/$ZOOM_LEVEL" | bc);
MODE_HEIGHT=$(echo "$HEIGHT/$ZOOM_LEVEL" | bc);
NEW_MODE_NAME="$(echo $MODE_WIDTH)x$(echo $MODE_HEIGHT)_60.00"
# On liste les modes déjà créé pendant cette cession
LIST=$(xrandr | grep " " | awk '{print $1}'),
# On cherche à savoir si le mode a déjà été créé
SEARCH=0;
for lines in $LIST
do
if [[ $lines == $NEW_MODE_NAME ]]; then
# Le mode est déjà créé
SEARCH=1;
break;
fi
done
# On modifie la résolution
if test $SEARCH -eq 0; then
xrandr --newmode $(gtf $MODE_WIDTH $MODE_HEIGHT 60 | sed -ne 's/"//g;s/ Modeline //p');
xrandr --addmode $DEVICE $NEW_MODE_NAME;
fi
xrandr --output $DEVICE --panning $PANNING --mode $NEW_MODE_NAME
echo "CURRENT_ZOOM=$ZOOM_LEVEL" > $CONFIG;
notify-send "Magnifier" "Niveau de zoom : $ZOOM_LEVEL";
elif [[ $ZOOM_LEVEL == "1" ]]; then
xrandr --output $DEVICE --panning $PANNING --mode $PANNING
echo "CURRENT_ZOOM=$ZOOM_LEVEL" > $CONFIG;
notify-send "Magnifier" "Niveau de zoom : $ZOOM_LEVEL";
fi
}
INCREASE_ZOOM(){
if [[ -f $CONFIG ]]; then
# Chargement du fichier de config
. $CONFIG
ZOOM_LEVEL=$(echo "$CURRENT_ZOOM*2" | bc);
else
# zoom minimum à 2 car on n'a jamais lancé
ZOOM_LEVEL=2;
fi
if test $ZOOM_LEVEL -le "16";
then
# On calcul les nouvelles résolutions
WIDTH=$(echo $PANNING | cut -f1 -dx);
HEIGHT=$(echo $PANNING | cut -f2 -dx);
MODE_WIDTH=$(echo "$WIDTH/$ZOOM_LEVEL" | bc);
MODE_HEIGHT=$(echo "$HEIGHT/$ZOOM_LEVEL" | bc);
NEW_MODE_NAME="$(echo $MODE_WIDTH)x$(echo $MODE_HEIGHT)_60.00"
# On liste les modes déjà créé pendant cette cession
LIST=$(xrandr | grep " " | awk '{print $1}'),
# On cherche à savoir si le mode a déjà été créé
SEARCH=0;
for lines in $LIST
do
if [[ $lines == $NEW_MODE_NAME ]]; then
# Le mode est déjà créé
SEARCH=1;
break;
fi
done
# On modifie la résolution
if test $SEARCH -eq 0; then
xrandr --newmode $(gtf $MODE_WIDTH $MODE_HEIGHT 60 | sed -ne 's/"//g;s/ Modeline //p');
xrandr --addmode $DEVICE $NEW_MODE_NAME;
fi
xrandr --output $DEVICE --panning $PANNING --mode $NEW_MODE_NAME
echo "CURRENT_ZOOM=$ZOOM_LEVEL" > $CONFIG;
notify-send "Magnifier" "Niveau de zoom : $ZOOM_LEVEL";
else
notity-send "Magnifier" "Niveau de zoom max atteint";
fi
}
DECREASE_ZOOM(){
if [[ -f $CONFIG ]]; then
# Chargement du fichier de config
. $CONFIG
ZOOM_LEVEL=$(echo "$CURRENT_ZOOM/2" | bc);
else
# zoom minimum à 2 car on n'a jamais lancé
ZOOM_LEVEL=1;
fi
if test $ZOOM_LEVEL -ge "2"; then
# On calcul les nouvelles résolutions
WIDTH=$(echo $PANNING | cut -f1 -dx);
HEIGHT=$(echo $PANNING | cut -f2 -dx);
MODE_WIDTH=$(echo "$WIDTH/$ZOOM_LEVEL" | bc);
MODE_HEIGHT=$(echo "$HEIGHT/$ZOOM_LEVEL" | bc);
NEW_MODE_NAME="$(echo $MODE_WIDTH)x$(echo $MODE_HEIGHT)_60.00"
# On liste les modes déjà créé pendant cette cession
LIST=$(xrandr | grep " " | awk '{print $1}'),
# On cherche à savoir si le mode a déjà été créé
SEARCH=0;
for lines in $LIST
do
if [[ $lines == $NEW_MODE_NAME ]]; then
# Le mode est déjà créé
SEARCH=1;
break;
fi
done
# On modifie la résolution
if test $SEARCH -eq 0; then
xrandr --newmode $(gtf $MODE_WIDTH $MODE_HEIGHT 60 | sed -ne 's/"//g;s/ Modeline //p');
xrandr --addmode $DEVICE $NEW_MODE_NAME;
fi
xrandr --output $DEVICE --panning $PANNING --mode $NEW_MODE_NAME
echo "CURRENT_ZOOM=$ZOOM_LEVEL" > $CONFIG;
notify-send "Magnifier" "Niveau de zoom : $ZOOM_LEVEL";
elif test $ZOOM_LEVEL -eq 1; then
RESTORE_DEFAULT_ZOOM;
fi
}
RESTORE_DEFAULT_ZOOM(){
xrandr --output $DEVICE --panning $PANNING --mode $PANNING
notify-send "Magnifier" "Niveau de zoom minimum";
echo "CURRENT_ZOOM=1" > $CONFIG;
}
case $1 in
-p ) INCREASE_ZOOM ;;
-m ) DECREASE_ZOOM ;;
-d ) RESTORE_DEFAULT_ZOOM ;;
* ) SELECT_ZOOM ;;
esac;
exit 0;
DÉPENDANCES:
- bc
- notify-send
- xrandr
POSSIBILITÉS:
- zoom x1 x2 x4 x8 x16 (x32 possible mais pas implémenté)
- sélection du zoom via une fenetre zenity
- fonction pour augmenter le zoom
- fonction pour réduire le zoom
- fonction pour revenir au zoom x1
- Mémorisation du niveau de zoom
TUTORIEL:
Copiez le script ci-après et enregistrez sous le nom de "magnifier"
rendez le exécutable :
chmod +x magnifier
placez le où vous voulez (le plus pratique)
sudo cp magnifier /usr/bin
Pour lancer l'interface de choix, il suffit d'utiliser la commande
magnifier
Ensuite, il faut attribuer des raccourcis au fonction de zoom et dézoom
Pour le zoom attribuer un raccourci à la commande
magnifier -p
Pour le dézoom, attribuer un raccourci à la commande
magnifier -m
Pour la fonction de retour au zoom x1, attribuer un raccourci à la commande
magnifier -d
Voilà.
JOYEUX NOEL
#4 Le 23/12/2013, à 23:54
- ThéoSon
Re : Un screen magnifier maison
Merci Benoit , c'est bon chez mi et top , bonne fêtes de fin de cette 2013
"La conscience est la dernière et la plus tardive évolution de la vie organique, et par conséquent ce qu'il y a de moins accompli et de plus fragile en elle. " Nietzshe
Hors ligne
#5 Le 24/12/2013, à 08:53
- Compte supprimé
Re : Un screen magnifier maison
Je poste une version améliorée (encore). Rien à changer niveau commande, le tutoriel mentionné plus haut est donc toujours valable.
J'ai ajouté le support pour des facteurs de zoom flottants:
x 1.6
x 3.2
x 6.4
x 12.8
#!/bin/bash
# zoom possibles
POSSIBLE_ZOOM=( "1" "1.6" "2" "3.2" "4" "6.4" "8" "12.8" "16" );
# on obtient le nom de l'interface connectee
DEVICE=$(xrandr | grep " connected" | awk '{print $1}');
# on obtient la résolution
PANNING=$(xrandr | grep " connected" | awk '{print $3}' | cut -f1 -d+);
# Fichier de configuration
CONFIG="/tmp/.magnifier.conf";
INTEGER_ZOOM(){
# On calcul les nouvelles résolutions
WIDTH=$(echo $PANNING | cut -f1 -dx);
HEIGHT=$(echo $PANNING | cut -f2 -dx);
MODE_WIDTH=$(echo "$WIDTH/$ZOOM_LEVEL" | bc);
MODE_HEIGHT=$(echo "$HEIGHT/$ZOOM_LEVEL" | bc);
NEW_MODE_NAME="$(echo $MODE_WIDTH)x$(echo $MODE_HEIGHT)_60.00"
# On liste les modes déjà créé pendant cette cession
LIST=$(xrandr | grep " " | awk '{print $1}'),
# On cherche à savoir si le mode a déjà été créé
SEARCH=0;
for lines in $LIST
do
if [[ $lines == $NEW_MODE_NAME ]]; then
# Le mode est déjà créé
SEARCH=1;
break;
fi
done
# On modifie la résolution
if test $SEARCH -eq 0; then
xrandr --newmode $(gtf $MODE_WIDTH $MODE_HEIGHT 60 | sed -ne 's/"//g;s/ Modeline //p');
xrandr --addmode $DEVICE $NEW_MODE_NAME;
fi
xrandr --output $DEVICE --panning $PANNING --mode $NEW_MODE_NAME
echo "CURRENT_ZOOM=$ZOOM_LEVEL" > $CONFIG;
notify-send "Magnifier" "Niveau de zoom : $ZOOM_LEVEL";
}
FLOATING_ZOOM(){
# On calcul les nouvelles résolutions
WIDTH=$(echo $PANNING | cut -f1 -dx);
HEIGHT=$(echo $PANNING | cut -f2 -dx);
MODE_WIDTH=$(echo "$WIDTH/$ZOOM_LEVEL" | bc);
MODE_HEIGHT=$(echo "$HEIGHT/$ZOOM_LEVEL*3/4" | bc);
NEW_MODE_NAME="$(echo $MODE_WIDTH)x$(echo $MODE_HEIGHT)_60.00"
# On liste les modes déjà créé pendant cette cession
LIST=$(xrandr | grep " " | awk '{print $1}'),
# On cherche à savoir si le mode a déjà été créé
SEARCH=0;
for lines in $LIST
do
if [[ $lines == $NEW_MODE_NAME ]]; then
# Le mode est déjà créé
SEARCH=1;
break;
fi
done
# On modifie la résolution
if test $SEARCH -eq 0; then
xrandr --newmode $(gtf $MODE_WIDTH $MODE_HEIGHT 60 | sed -ne 's/"//g;s/ Modeline //p');
xrandr --addmode $DEVICE $NEW_MODE_NAME;
fi
xrandr --output $DEVICE --panning $PANNING --mode $NEW_MODE_NAME
echo "CURRENT_ZOOM=$ZOOM_LEVEL" > $CONFIG;
notify-send "Magnifier" "Niveau de zoom : $ZOOM_LEVEL";
}
SELECT_ZOOM(){
if [[ -f $CONFIG ]]; then
# Chargement du fichier de config
. $CONFIG
else
# zoom minimum
CURRENT_ZOOM=1;
fi
# Définition des niveaux de zoom
# ${#POSSIBLE_ZOOM[*]}
for idx in 0 1 2 3 4 5 6 7 8
do
if [[ ${POSSIBLE_ZOOM[$idx]} == $CURRENT_ZOOM ]]; then
var="$(echo $var) TRUE $(echo ${POSSIBLE_ZOOM[$idx]})"
else
var="$(echo $var) FALSE $(echo ${POSSIBLE_ZOOM[$idx]})"
fi
done;
# On demande à l'utilisateur de choisir le zoom level
ZOOM_LEVEL=$(zenity --width=380 --height=260 --list --radiolist --title="Magnifier" --text="Choisir le niveau de zoom désiré" --column " x " --column "Zoom possible" $var)
case $ZOOM_LEVEL in
1 ) RESTORE_DEFAULT_ZOOM ;;
"" | $CURRENT_ZOOM ) ;;
1.6 | 3.2 | 6.4 | 12.8 ) FLOATING_ZOOM ;;
* ) INTEGER_ZOOM;;
esac;
}
INCREASE_ZOOM(){
if [[ -f $CONFIG ]]; then
# Chargement du fichier de config
. $CONFIG
else
# zoom minimum à 1 car on n'a jamais lancé
CURRENT_ZOOM=1;
fi
for idx in 0 1 2 3 4 5 6 7 8
do
if [[ $CURRENT_ZOOM == ${POSSIBLE_ZOOM[$idx]} ]]; then
if test $idx -le 7; then
indice=$(echo "$idx+1" | bc);
echo $indice
ZOOM_LEVEL=${POSSIBLE_ZOOM[$indice]};
fi
break;
fi
done
case $ZOOM_LEVEL in
"" ) ;;
1.6 | 3.2 | 6.4 | 12.8 ) FLOATING_ZOOM;;
* ) INTEGER_ZOOM;;
esac
}
DECREASE_ZOOM(){
if [[ -f $CONFIG ]]; then
# Chargement du fichier de config
. $CONFIG
else
# zoom minimum à 1 car on n'a jamais lancé
$CURRENT_ZOOM=1;
fi
for idx in 0 1 2 3 4 5 6 7 8
do
if [[ $CURRENT_ZOOM == ${POSSIBLE_ZOOM[$idx]} ]]; then
if test $idx -ge 1; then
indice=$(echo "$idx-1" | bc);
ZOOM_LEVEL=${POSSIBLE_ZOOM[$indice]};
fi
break;
fi
done
case $ZOOM_LEVEL in
"" ) ;;
1.6 | 3.2 | 6.4 | 12.8 ) FLOATING_ZOOM;;
* ) INTEGER_ZOOM;;
esac
}
RESTORE_DEFAULT_ZOOM(){
xrandr --output $DEVICE --panning $PANNING --mode $PANNING
notify-send "Magnifier" "Niveau de zoom minimum";
echo "CURRENT_ZOOM=1" > $CONFIG;
}
case $1 in
-p ) INCREASE_ZOOM ;;
-m ) DECREASE_ZOOM ;;
-d ) RESTORE_DEFAULT_ZOOM ;;
* ) SELECT_ZOOM ;;
esac;
exit 0;
#6 Le 25/12/2013, à 14:24
- Compte supprimé
Re : Un screen magnifier maison
Voila comme promis, après quelques heures...j'apporte le cadeau. J'ai modifié un peu la loupe. J'ai fait un GUI en python assez simple. La porte est ouverte à l'internationalisation. Une page github est disponible:
https://github.com/benoitfragit/magnifier
Un tutoriel est contenu dans le fichier README.txt. J'ai également ajouté un installateur et un désinstallateur.
Dernière modification par benoitfra (Le 25/12/2013, à 19:34)
Pages : 1