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".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 21/12/2013, à 20: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, à 21: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 24/12/2013, à 00: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 24/12/2013, à 00: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, à 09: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, à 15: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, à 20:34)

Hors ligne

Haut de page ↑