Ho finalmente messo insieme una configurazione di script completa che rileverà lo stato del mio dock e cambierà automaticamente i monitor.
La prima cosa che ho fatto è stato di sbarazzarmi del mio Xorg.conf in quanto ha causato più problemi che ha risolto. Da quando sto usando una scheda nvdia ho scoperto che usare la disper era il modo migliore di procedere. Lo avevo già scontato in quanto i suoi comandi standard non riuscivano a ottenere la mia configurazione dualview ma poi ho scoperto che potevo creare un metamode personalizzato da usare con disper.
Per creare il metamode personalizzato ho usato i valori memorizzati in Xorg.conf insieme ai test precedenti con nv-control-dpy e xrandr come guida. Questo metamode e altri valori twinview sono stati aggiunti a un file che può essere passato a disperdere tramite stdin .
A causa della presenza di monitor di dimensioni diverse con Twinview, è necessario utilizzare XCreateMouseVoid , come descritto in questa domanda .
Di seguito è riportata una suddivisione completa degli script e dei file con il loro contenuto.
Crea lo script XCreateMouseVoid:
Nome dello script: ~/.mousevoid
#!/bin/bash
echo "Mouse Void"
/opt/XCreateMouseVoid/XCreateMouseVoid 0 1112 1280 88 &
/opt/XCreateMouseVoid/XCreateMouseVoid 0 0 1280 88 &
chmod +x ~/.mousevoid
Crea file impostazioni Disper:
Nome del file: ~/.disperDocked
backend: nvidia
associated displays: CRT-0, DFP-0, DFP-1
metamode: CRT-0: 1280x1024_60 @1280x1024 +0+88, DFP-1: 1920x1200 @1920x1200 +1280+0
scaling: default, default, stretched
xinerama info order: DFP-1, CRT-0, DFP-0
Creare lo script della sessione dbus di esportazione:
Nome dello script: ~/.export_x_info
#!/bin/bash
# Export the dbus session address on startup so it can be used by any other environment
sleep 5
touch $HOME/.Xdbus
chmod 600 $HOME/.Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.Xdbus
# Export XAUTHORITY value on startup so it can be used by cron
env | grep XAUTHORITY >> $HOME/.Xdbus
echo 'export XAUTHORITY' >> $HOME/.Xdbus
Imposta solo come eseguibile dall'utente: chmod 700 ~/.export_x_info
Quindi inseriscilo in Applicazioni di avvio:
Name: X Environment Variables
Command: /home/your_user/.export_x_info
A meno che non si riavvii, è necessario eseguire ~ / .export_x_info per creare il file .Xdbus
Crea la regola udev che verrà eseguita con un evento dock:
Nome dello script: /etc/udev/rules.d/81-dell-dock.rules
KERNEL=="dock.0", ACTION=="change", RUN+="/usr/local/sbin/dell-dock"
chmod +x /etc/udev/rules.d/81-dell-dock.rules
Creare lo script associato alla regola udev:
Nome dello script: /usr/local/sbin/dell-dock
#!/bin/sh
# wait for the dock state to change
sleep 0.5
DOCKED=$(cat /sys/devices/platform/dock.0/docked)
case "$DOCKED" in
"0")
echo "Run UnDocking Script..."
/usr/local/sbin/undock
;;
"1")
echo "Run Docking Script..."
/usr/local/sbin/dock
;;
esac
exit 0
chmod +x /usr/local/sbin/dell-dock
Crea lo script di sgancio (cambia il tuo utente in modo che corrisponda al tuo nome utente):
Nome dello script: /usr/local/sbin/undock
#!/bin/bash
USER=your_user
export HOME=/home/$USER
source $HOME/.Xdbus
export DISPLAY=:0
echo "UnDocking Script"
echo "Switch primary monitor"
sudo -u $USER disper -s
echo "Killall XCreateMouseVoid"
pkill XCreate
echo "Restart conky"
pkill conky
sudo -u $USER conky &
chmod +x /usr/local/sbin/undock
Creare lo script dock (cambio vostro_utente per abbinare il proprio nome utente):
Nome dello script: /usr/local/sbin/dock
#!/bin/bash
USER=your_user
export HOME=/home/$USER
source $HOME/.Xdbus
export DISPLAY=:0
echo "Docking Script"
echo "Switch to Dualview"
sudo -u $USER disper -i < $HOME/.disperDocked
echo "Start XCreateMouseVoid"
pkill XCreate
sudo -u $USER $HOME/.mousevoid
echo "Restart conky"
pkill conky
sudo -u $USER conky &
chmod +x /usr/local/sbin/dock
Per eseguire il debug degli script dock è necessario abilitare la registrazione debug udev: