6 999
contributi
Gmc (discussione | contributi) |
S3v (discussione | contributi) mNessun oggetto della modifica |
||
Riga 2: | Riga 2: | ||
{{Versioni compatibili|Wheezy}} | {{Versioni compatibili|Wheezy}} | ||
==Introduzione== | ==Introduzione== | ||
Questa guida si propone di spiegare come usare udev e xrandr per configurare in automatico uno o più monitor quando si collegano alla | 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. | ||
Normalmente per configurare un monitor esterno si utilizza xrandr. Seguendo le seguenti istruzioni sarete in grado di farlo una tantum e dalla volta successiva in poi in maniera automatica, possibilmente scegliendo la configurazione a seconda del monitor che si attacca. | Normalmente per configurare un monitor esterno si utilizza xrandr. Seguendo le seguenti istruzioni sarete in grado di farlo una tantum e dalla volta successiva in poi in maniera automatica, possibilmente scegliendo la configurazione a seconda del monitor che si attacca. | ||
Per raggiungere questo scopo, si userà [ | 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> | Prima di tutto, bisogna capire che configurazione si ha. Lanciando da terminale <code>xrandr</code> si avrà un output simile al seguente: | ||
<pre> | <pre> | ||
$ xrandr | |||
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192 | Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192 | ||
LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 270mm x 150mm | LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 270mm x 150mm | ||
Riga 20: | Riga 21: | ||
DP1 disconnected (normal left inverted right x axis y axis) | DP1 disconnected (normal left inverted right x axis y axis) | ||
</pre> | </pre> | ||
Qui, <code>LVDS1</code> è il monitor del portatile, <code>VGA1</code> è una porta | Qui, <code>LVDS1</code> è il monitor del portatile, <code>VGA1</code> è una porta VGA, <DP1> è un porta DisplayPort, probabilmente presente nel chipset grafico, ma nel caso in questione non fisicamente collegata ad una porta. Generalmente altri possibili output sono <code>HDMI</code>, <DVI> con ovvia interpretazione. | ||
Prendere nota dei propri dati. Serviranno successivamente. | Prendere nota dei propri dati. Serviranno successivamente. | ||
Ora collegare un monitor esterno e configurarlo, secondo le proprie necessità, con xrandr. Ad esempio | Ora collegare un monitor esterno e configurarlo, secondo le proprie necessità, con <code>xrandr</code>. Ad esempio: | ||
<pre> | <pre> | ||
xrandr --output LVDS1 --pos 1280x256 --primary --output VGA1 --pos 0x0 --auto | $ xrandr --output LVDS1 --pos 1280x256 --primary --output VGA1 --pos 0x0 --auto | ||
</pre> che rende primario l'output sul monitor del portatile, e affianca a sinistra un | </pre> | ||
che rende primario l'output sul monitor del portatile, e affianca a sinistra un monitor collegato alla porta VGA. In questo caso, dato che il monitor esterno ha una risoluzione verticale maggiore del portatile, si è scelto di allineare i due monitor in basso. | |||
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 | 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: | ||
<pre> | <pre> | ||
$ cat /sys/class/drm/card0-VGA-1/edid | hexdump -v -e '"" "%X" ' | $ cat /sys/class/drm/card0-VGA-1/edid | hexdump -v -e '"" "%X" ' | ||
</pre> | </pre> | ||
Si otterrà una stringa esadecimale. Ricordarsi di cambiare "VGA-1" a seconda dell'output avuto in precedenza da xrandr. 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 | 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+="/path/to/script/monitor.sh" | ACTION=="change", SUBSYSTEM=="drm", RUN+="/path/to/script/monitor.sh" | ||
</pre> | </pre> | ||
Questa regola attiverà lo script <code>/path/to/script/monitor.sh</code> ad ogni collegamento o scollegamento di un cavo esterno | Questa regola attiverà lo script <code>/path/to/script/monitor.sh</code> ad ogni collegamento o scollegamento di un cavo esterno. | ||
==Script principale== | ==Script principale== | ||
Creare e rendere eseguibile il seguente file <code>/path/to/script/monitor.sh</code> | Creare e rendere eseguibile il seguente file <code>/path/to/script/monitor.sh</code> | ||
Riga 65: | Riga 67: | ||
Spieghiamo cosa fa lo script. | Spieghiamo cosa fa lo script. | ||
<code>UNI</code> è una costante, l'edid dello schermo esterno, ottenuto come detto in precedenza. La variabile <code>VGA</code> è il path nel syfs della porta | <code>UNI</code> è una costante, l'edid dello schermo esterno, ottenuto come detto in precedenza. La variabile <code>VGA</code> è il [[path]] nel syfs della porta VGA (ricordarsi che può cambiare a seconda della propria configurazione). | ||
Se lo schermo risulta connesso (primo if) si abilita tramite xrandr lo schermo esterno (necessario altrimenti non si riesce a prendere l'edid). Dopodiché se | 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 precendenza. | ||
Se lo schermo non è attaccato si deconfigura il secondo monitor. | Se lo schermo non è attaccato si deconfigura il secondo monitor. | ||
Riga 74: | Riga 76: | ||
==Sofisticherie== | ==Sofisticherie== | ||
Ovviamente si possono fare cose decisamente sofisticate, come abilitare l'audio | Ovviamente si possono fare cose decisamente sofisticate, come abilitare l'audio DVI/HDMI o cose del genere. Inoltre facendo il parsing dell'edid, tramite ''get-edid'' e ''parse-edid'', si può andare a cercare il nome del modello e fare cose molto sofisticate (anche se quasi inutili...) come se hai questo modello di monitor attaccato imposta <code>xrandr</code> in questa maniera (uno potrebbe avere 10 monitor uguali... però il seriale sarebbe diverso). | ||
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) }} | |||
[[Categoria: Xorg]] | [[Categoria: Xorg]] | ||
contributi