posto questo TIP sperando che possa essere d'aiuto a tutti quelli che come me hanno penato e stanno penando per l'utilizzo del tasto Fn del proprio portatile con lo scopo di switchare la visualizzazione fra lo schermo del notebook e quello di un proiettore e viceversa.
Per cominciare un po' di References:
- [1]Switch among displays!
[2][TIP] Dual monitor, intel e xrandr
[3]Perché xrandr non funziona con gli Fn+x keys?
Premesso che ho letto e riletto il TIP [2] ma non sono riuscito a trovare una soluzione per la mia esigenza, sebbene sia stato fondamentale per giungere alla conclusione di questo TIP.
Come prima cosa installate app-misc/i810switch.
Ebbene, supponiamo di voler associare al tasto Fn+F7 (che sul sony vaio ha l'icona LCD->VGA) la seguente funzione ciclica: Cambio risoluzione -> mando l'output su VGA e LCD -> output solo su VGA -> cambio di nuovo risoluzione e mando output solo su LCD.
Il mio LCD ha una risoluzione 1280x800, quindi prenderò questa come esempio.
Ora, per prima cosa dobbiamo modificare lo script /usr/bin/i810rotate da così:
Code: Select all
#!/bin/sh -
dev=`i810switch`
dev=`echo $dev`
if [ "$dev" = "CRT: off LCD: on" ] ; then
i810switch crt on lcd on > /dev/null
elif [ "$dev" = "CRT: on LCD: off" ] ; then
i810switch crt off lcd on > /dev/null
else
i810switch crt on lcd off > /dev/null
fi
Code: Select all
#!/bin/sh -
export XAUTHORITY=/home/username/.Xauthority
export DISPLAY=:0.0
dev=`i810switch`
dev=`echo $dev`
if [ "$dev" = "CRT: off LCD: on" ] ; then
xrandr --output LVDS --mode 1024x768 --same-as VGA --mode 1024x768
i810switch crt on lcd on > /dev/null
elif [ "$dev" = "CRT: on LCD: off" ] ; then
xrandr --output LVDS --mode 1280x800 --same-as VGA --mode 1280x800
i810switch crt off lcd on > /dev/null
else
xrandr --output VGA --mode 1024x768 --same-as LVDS --mode 1024x768
i810switch crt on lcd off > /dev/null
fi(Grazie oRDeX per la dritta!)
Se provate lo script a mano già dovrebbe funzionare.
Ora vediamo come intercettare la pressione della combinazione di tasti Fn+F7.
Aprite una shell e digitate
Code: Select all
tail -0f /var/log/messagesCode: Select all
Oct 4 11:46:05 SZ330P logger: ACPI event unhandled: sony/hotkey SPIC 00000001 00000012
Oct 4 11:46:05 SZ330P logger: ACPI event unhandled: sony/hotkey SPIC 00000001 0000003bCreate il file /etc/acpi/events/screen_rotate e inserite il seguente codice all'interno:
Code: Select all
event=sony/hotkey SPIC 00000001 00000012
action=/usr/bin/i810rotateChiaramente è necessario che i moduli del kernel siano compilati per avere questo supporto. Ad esempio nel caso dei sony, c'è il modulo SONYPI e SONY_LAPTOP.
Ma per questo rimando ad altre guide che sono in giro sul web.

