Dock / UnDock Scripts
W końcu przygotowałem kompletną konfigurację skryptu, która wykryje mój status stacji dokującej i automatycznie przełączy monitory.
Pierwszą rzeczą, którą zrobiłem, było pozbycie się mojego Xorg.conf, ponieważ spowodował więcej problemów, które rozwiązał. Ponieważ używam karty NVDIA I w końcu okazało się, że za pomocą disper była najlepsza droga. Zdyskontowałem go wcześniej, ponieważ jego standardowe polecenia nie mogły osiągnąć konfiguracji dualview, ale potem odkryłem, że mogę stworzyć niestandardowy metamode do użycia z disper.
Aby utworzyć niestandardowy metamode, wykorzystałem wartości zapisane w Xorg.conf wraz z poprzednimi testami z nv-control-dpy i xrandr jako wskazówką. Ten metamode i inne wartości twinview zostały dodane do pliku, który można przekazać w celu rozproszenia standardowego wejścia .
Ze względu na posiadanie monitorów o różnej wielkości z Twinview, muszę użyć XCreateMouseVoid , jak opisano w tym pytaniu .
Poniżej znajduje się pełna lista skryptów i plików z ich zawartością.
Skrypty
Utwórz skrypt XCreateMouseVoid:
Nazwa skryptu: ~/.mousevoid
#!/bin/bash
echo "Mouse Void"
/opt/XCreateMouseVoid/XCreateMouseVoid 0 1112 1280 88 &
/opt/XCreateMouseVoid/XCreateMouseVoid 0 0 1280 88 &
chmod +x ~/.mousevoid
Utwórz plik ustawień Disper:
Nazwa pliku: ~/.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
Utwórz skrypt sesji eksportu dbus:
Nazwa skryptu: ~/.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
Ustawiony tylko na plik wykonywalny użytkownika: chmod 700 ~/.export_x_info
Następnie umieść go w aplikacjach startowych:
Name: X Environment Variables
Command: /home/your_user/.export_x_info
O ile nie uruchomisz ponownie, musisz uruchomić ~ / .export_x_info, aby utworzyć plik .Xdbus
Utwórz regułę udev, która będzie działać po zdarzeniu dokowania:
Nazwa skryptu: /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
Utwórz skrypt powiązany z regułą udev:
Nazwa skryptu: /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
Utwórz skrypt oddokowania (zmień swojego_użytkownika, aby pasował do swojej nazwy użytkownika):
Nazwa skryptu: /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
Utwórz skrypt dokowania (zmień swojego_użytkownika, aby pasował do nazwy użytkownika):
Nazwa skryptu: /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
Odpluskwić
Aby debugować skrypty dokowania, musisz włączyć rejestrowanie debugowania udev:
udevadm control --log-priority=debug
Następnie otwórz syslog w przeglądarce plików dziennika
Zasoby
Readme nVidia: Config Twinview , X Config Opcje
Autorandr
Disper PPA
nv-control-dpy
Forum Ubuntu - Un / Dock Skrypty
Thinkwiki
udevadm