Как я могу автоматически обновить макет моего монитора в XFCE?

9

У меня есть ноутбук, который обычно пристыкован к большому монитору. В док-станции я хочу использовать большой монитор в качестве основного дисплея, а экран ноутбука - как дополнительный дисплей справа. В нерабочем состоянии экран ноутбука является единственным дисплеем.

XFCE, похоже, не имеет встроенной поддержки нескольких мониторов. Я нашел ARandR , который позволил мне настроить мои мониторы так, как я хочу. Я могу использовать ARandR для сохранения профилей для пристыкованных и отстыкованных конфигураций (которые на самом деле являются просто сценариями оболочки, которые вызывают xrandr ).

Но как заставить эти профили автоматически применяться, когда ноутбук подключен и отсоединен? Должен ли я попытаться создать правило udev, которое определяет док-станцию? Есть ли способ лучше?

CJM
источник
Еще не тестировал, но x-on-resize был разработан одним из разработчиков X, чтобы сделать именно это.
Микель

Ответы:

5

Одним из способов является создание правила udev, но так как я хотел что-то более переносимое, у меня есть этот скрипт bash. Он опирается на поддержку inotifywait, не имеет каких-либо петель и считается эффективным.

external-lcd.sh

#!/bin/sh
# inspired of:                                                                                            
#   http://unix.stackexchange.com/questions/4489/a-tool-for-automatically-applying-randr-configuration-   when-external-display-is-p                                                                                
#   http://ozlabs.org/~jk/docs/mergefb/                                                                   
#   http://superuser.com/questions/181517/how-to-execute-a-command-whenever-a-file-changes/181543#181543  

export MONITOR2=/sys/class/drm/card0-VGA-1/status                                                         

while inotifywait -e modify,create,delete,open,close,close_write,access $MONITOR2;                        

dmode="$(cat $MONITOR2)"                                                                                  

do                                                                                                        
    if [ "${dmode}" = disconnected ]; then                                                                
         /usr/bin/xrandr --auto                                                                           
         echo "${dmode}"                                                                                  
    elif [ "${dmode}" = connected ];then                                                                  
         /usr/bin/xrandr --output VGA1 --auto --right-of LVDS1                                            
         echo "${dmode}"                                                                                  
    else /usr/bin/xrandr --auto                                                                           
         echo "${dmode}"                                                                                  
    fi                                                                                                    
done 

Не забудьте сделать файл исполняемым ( chmod +x external-lcd.sh). Тогда просто запускайте его всякий раз, когда запускаете свою DE.

Я использую это на archlinux, поэтому я думаю, что это должно работать. Вы можете изменить параметры xrandr или поменять их местами, чтобы использовать конфигурации arandr.

phoops
источник