3 581
contributi
Gmc (discussione | contributi) Nessun oggetto della modifica |
(verificata, più modifiche minori) |
||
Riga 1: | Riga 1: | ||
{{Versioni compatibili|Wheezy}} | {{Versioni compatibili|Wheezy|Jessie}} | ||
==Introduzione== | ==Introduzione== | ||
Questa guida si propone di spiegare come usare <code>udev</code> e <code>xrandr</code> per configurare in automatico uno o più monitor quando si collegano alla VGA, DVI o HDMI. | Questa guida si propone di spiegare come usare <code>udev</code> e <code>xrandr</code> per configurare in automatico uno o più monitor quando si collegano alla VGA, DVI o HDMI. | ||
Riga 6: | Riga 6: | ||
Per raggiungere questo scopo, si userà [[Udev_e_Debian|udev]], che attiverà uno [[script]] al collegamento (o scollegamento) di un monitor. Questo script, tramite l'[http://en.wikipedia.org/wiki/Extended_display_identification_data edid] riconosce univocamente il monitor esterno. A questo punto con una serie di if, possiamo configurare a piacere il nostro monitor. | Per raggiungere questo scopo, si userà [[Udev_e_Debian|udev]], che attiverà uno [[script]] al collegamento (o scollegamento) di un monitor. Questo script, tramite l'[http://en.wikipedia.org/wiki/Extended_display_identification_data edid] riconosce univocamente il monitor esterno. A questo punto con una serie di if, possiamo configurare a piacere il nostro monitor. | ||
==Xrandr== | ==Xrandr== | ||
Prima di tutto, bisogna capire che configurazione si ha. Lanciando da terminale <code>xrandr</code> si avrà un output simile al seguente: | Prima di tutto, bisogna capire che configurazione si ha. Lanciando da terminale <code>xrandr</code> si avrà un output simile al seguente: | ||
Riga 31: | Riga 32: | ||
Se si hanno più monitor esterni, configurare ogni monitor. | Se si hanno più monitor esterni, configurare ogni monitor. | ||
==Edid== | ==Edid== | ||
Come detto in precedenza, tramite l'edid avremo un modo univoco per riconoscere un monitor esterno. Per trovare l'edid del monitor, bisogna prima di tutto collegarlo e attivarlo tramite Xorg. A questo punto dare: | Come detto in precedenza, tramite l'edid avremo un modo univoco per riconoscere un monitor esterno. Per trovare l'edid del monitor, bisogna prima di tutto collegarlo e attivarlo tramite Xorg. A questo punto dare: | ||
Riga 37: | Riga 39: | ||
</pre> | </pre> | ||
Si otterrà una stringa esadecimale. Ricordarsi di cambiare "VGA-1" a seconda dell'output avuto in precedenza da <code>xrandr</code>. Copiare questa stringa. | Si otterrà una stringa esadecimale. Ricordarsi di cambiare "VGA-1" a seconda dell'output avuto in precedenza da <code>xrandr</code>. Copiare questa stringa. | ||
==Regola udev== | ==Regola udev== | ||
Il punto interessante è che udev si accorge quando si collega (o scollega) un monitor ad una porta (per esempio VGA). A questo punto si crea una regola udev che lancia uno script. Quindi bisogna creare il file <code>/etc/udev/rules.d/90-monitor.rules</code> | Il punto interessante è che udev si accorge quando si collega (o scollega) un monitor ad una porta (per esempio VGA). A questo punto si crea una regola udev che lancia uno script. Quindi bisogna creare il file <code>/etc/udev/rules.d/90-monitor.rules</code> | ||
<pre> | <pre> | ||
ACTION=="change", SUBSYSTEM=="drm", RUN+="/ | ACTION=="change", SUBSYSTEM=="drm", RUN+="/usr/local/sbin/monitor.sh" | ||
</pre> | </pre> | ||
Questa regola attiverà lo script <code>/ | Questa regola attiverà lo script <code>/usr/local/sbin/monitor.sh</code> ad ogni collegamento o scollegamento di un cavo esterno. | ||
==Script principale== | ==Script principale== | ||
Creare | Creare il seguente file con percorso e nome <code>/usr/local/sbin/monitor.sh</code> | ||
<pre> | <pre> | ||
#! /bin/bash | |||
UNI=stringa esadecimale contenente l'edid dello schermo | UNI=stringa esadecimale contenente l'edid dello schermo | ||
VGA=/sys/class/drm/card0/card0-VGA-1/ | VGA=/sys/class/drm/card0/card0-VGA-1/ | ||
export DISPLAY=:0.0 | |||
# esci se Xorg non è attivo | |||
pidof /usr/bin/X > /dev/null 2>&1 || exit 0 | |||
if [[ `cat $VGA\status` == "connected" ]] | if [[ "`cat $VGA\status`" == "connected" ]] | ||
then | then | ||
xrandr --output LVDS1 --primary --output VGA1 --auto; | xrandr --output LVDS1 --primary --output VGA1 --auto; | ||
EDID=`cat $VGA\edid | hexdump -v -e '"" "%X" '`; | EDID=`cat $VGA\edid | hexdump -v -e '"" "%X" '`; | ||
if [[ $UNI == $EDID ]] | if [[ "$UNI" == "$EDID" ]] | ||
then | then | ||
xrandr --output LVDS1 | xrandr --output LVDS1 --primary --output VGA1 --pos 0x0 --auto | ||
fi | fi | ||
else | else | ||
Riga 64: | Riga 72: | ||
fi | fi | ||
</pre> | </pre> | ||
<code>UNI</code> è una costante, l'edid dello schermo esterno, ottenuto come detto in precedenza | Poi renderlo eseguibile, assegnandogli i giusti permessi e utente/gruppo riservati: | ||
<pre> | |||
# chmod 754 /usr/local/sbin/monitor.sh | |||
# chown root:staff /usr/local/sbin/monitor.sh | |||
</pre> | |||
Spieghiamo ora cosa fa lo script: | |||
* <code>UNI</code> è una costante, l'edid dello schermo esterno, ottenuto come detto in precedenza; | |||
* <code>VGA</code> è il [[path]] nel syfs della porta VGA (ricordarsi che può cambiare a seconda della propria configurazione); | |||
* <code>DISPLAY</code> identifica il server <code>Xorg</code> attivo, e il primo (e in genere unico) presente è identificabile con <code>:0[.0]</code>; se si è in dubbio è sufficiente stampare il contenuto di questa variabile:<pre>$ echo $DISPLAY</pre> in modo che sia utilizzata da udev. | |||
Se lo schermo risulta connesso (primo if) si abilita tramite <code>xrandr</code> lo schermo esterno (necessario altrimenti non si riesce a prendere l'edid). Dopodiché se l'edid è uguale a quello della costante UNI si configura <code>xrandr</code> in una certa maniera (in questo caso alla stessa maniera della sezione [[#Xrandr|Xrandr]], altrimenti si lascia tutto come in | Se lo schermo risulta connesso (primo if) si abilita tramite <code>xrandr</code> lo schermo esterno (necessario altrimenti non si riesce a prendere l'edid). Dopodiché se l'edid è uguale a quello della costante UNI si configura <code>xrandr</code> in una certa maniera (in questo caso alla stessa maniera della sezione [[#Xrandr|Xrandr]], altrimenti si lascia tutto come in precedenza. | ||
Se lo schermo non è attaccato si deconfigura il secondo monitor. | Se lo schermo non è attaccato si deconfigura il secondo monitor. | ||
Riga 79: | Riga 95: | ||
Ovviamente le possibilità sono solo limitate dalla fantasia. | Ovviamente le possibilità sono solo limitate dalla fantasia. | ||
{{Autori | Autore = [[Utente:Gmc|Gmc]] 16:31, 22 set 2012 (CEST) }} | {{Autori | ||
|Autore= [[Utente:Gmc|Gmc]] 16:31, 22 set 2012 (CEST) | |||
|Estesa_da= | |||
|Verificata_da= | |||
: [[Utente:HAL 9000|HAL 9000]] 17:05, 10 mag 2015 (CEST) | |||
|Numero_revisori=1 | |||
}} | |||
[[Categoria: Xorg]] | [[Categoria: Xorg]] |
contributi