Lubuntu: горячая клавиша для переключения дисплеев

Lubuntu: горячая клавиша для переключения дисплеев

Я относительно новичок в Linux и новичок в написании bash-скриптов.

Я пытаюсь настроить клавишу Fn-F5 на моем старом нетбуке Asus EEE для переключения между внутренним и внешним мониторами.

Создание bash-скрипта в ~/bin/toggle_displays.sh:

    #!/bin/bash

if (xrandr | grep "VGA1 disconnected"); then
# external monitor not connected: do nothing
    xrandr --output LVDS1 --auto --output VGA1 --off 
else
# external monitor connected: toggle monitors
    if (xrandr | grep -E "LVDS1 connected (primary )?\("); then
        xrandr --output LVDS1 --auto --output VGA1 --off
    else
        xrandr --output LVDS1 --off --output VGA1 --auto
    fi
fi

Добавление горячей клавиши в <keyboard>раздел ~/.config/openbox/lubuntu-rc.xml:

...
<keybind key="XF86Display">
  <action name="Execute">
    <command>~/bin/toggle_displays.sh</command>
  </action>
</keybind>
...

Проблема очень странная: когда активен внутренний дисплей, переключение на внешний всегда работает. Но когда активен внешний, переключение просто делает черный экран с курсором мыши на внутреннем дисплее. Еще более удивительно, что последнее переключение иногда работает, если я запускаю скрипт из терминала, а не с помощью горячей клавиши.

В чем может быть проблема? И как это можно исправить?

В качестве примечания, запуск скрипта из терминала для переключения с внешнего на внутренний дисплей печатает LVDS1 connected primary (normal left inverted right x axis y axis)на терминал. Почему это происходит, если я не делаю этого echoв своем скрипте?

EDIT: Вот мой xrandrвывод (с использованием внешнего монитора):

Screen 0: minimum 8 x 8, current 1680 x 1050, maximum 32767 x 32767
LVDS1 connected primary (normal left inverted right x axis y axis)
   1024x600       60.0 +
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 473mm x 296mm
   1680x1050      60.0*+
   1600x1200      60.0  
   1280x1024      75.0     60.0  
   1440x900       75.0     59.9  
   1280x800       59.8  
   1152x864       75.0  
   1024x768       75.1     70.1     60.0  
   832x624        74.6  
   800x600        72.2     75.0     60.3     56.2  
   640x480        75.0     72.8     66.7     60.0  
   720x400        70.1  
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

решение1

Я написал себе скрипт bash, который переключается между экраном ноутбука и внешним экраном. Он проверяет, какой экран включен, выключает его и включает другой экран с его собственным разрешением. Хорошая вещь в том, что ему не нужно знать названия экранов, так как они собираются из xrandr.

#!/bin/bash
#Toggles between two screens. Assuming only one external screen is connected

monitors=`xrandr | grep -P ' connected' | grep -o '^[^ ]*'`
set -- "$monitors"
#monArr contains an array of the id's of the connected screens
declare -a monArr=($*)

#onMon holds the id of the *first* on screen found
onMon=`xrandr --listmonitors | head -2 | grep -oP "[a-zA-Z]*-[0-9]$"`

#offMon holds the id of the other monitor, which is not on
if [ "$onMon" = "${monArr[0]}" ]

then
    offMon=${monArr[1]}
else
    offMon=${monArr[0]}
fi

#Switches the on screen off and vice versa
xrandr --output $offMon --auto --output $onMon --off

Связанный контент