Я являюсь относительно плохо знакомым с Linux и новым для избиения сценариев.
Я пытаюсь настроить Fn-F5, включают мою старую Asus нетбук EEE для переключения между внутренними и внешними мониторами.
Создание сценария удара в ~/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
Горячая клавиша Adding к <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
в моем сценарии?
Править: Вот мой 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)
Я записал мне сценарий удара, который переключается между экраном ноутбука и внешним экраном. Это проверяет, какой экран идет, выключает его и включает другой экран со своим родным разрешением. Хорошая вещь. то, что это не должно знать названия экранов, поскольку они собраны от 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