Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#1 Le 21/12/2013, à 19:42

benoitfra

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

Hors ligne

#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

benoitfra

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

Hors ligne

#4 Le 23/12/2013, à 23:54

ThéoSon

Re : Un screen magnifier maison

Merci Benoit , c'est bon chez mi et top lol , 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

benoitfra

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;

Hors ligne

#6 Le 25/12/2013, à 14:24

benoitfra

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.



Voici un petit screen:
1387977690.png

Dernière modification par benoitfra (Le 25/12/2013, à 19:34)

Hors ligne

Haut de page ↑