Pull to refresh

Заставим клавишу Switch Display на ноутбуке работать по-своему!

Reading time3 min
Views11K
Вам нравится как работает gnome-display-properties (это тот, который «Система -> Параметры -> Мониторы») и клавиша переключения монитора на ноутбуке? Да? Тогда можете проходить мимо, топик не для вас :)

Самое большое неудобство этого аплета — невозможность вручную настроить порядок переключения режимов: current configuration -> mirror -> extended desktop -> laptop only -> external only -> и снова current configuration. Не слишком удобно, не правда ли?.. Вот эту задачу мы и будем решать.

Задача


— заставить клавишу Switch Display переключать всего два режима:
1) экран ноутбука включен, внешний монитор отключен
2) экран ноутбука отключен, внешний монитор включен
— сделать так, чтобы ноутбук не уходил в режим ожидания по захлопыванию крышки, если включен внешний экран

Решение



1. Для начала определимся с переключением мониторов. Делать мы это будем с помощью консольной утилиты xrandr.

— включаем внешний монитор и отключаем внутренний:
xrandr --output VGA --auto && xrandr --output LVDS --off
— выключаем внешний и включаем экран ноутбука:
xrandr --output LVDS --auto && xrandr --output VGA --off

Обратите внимание что имена VGA и LVDS могут отличатся от системы к системе. Это могут быть: LVDS/VGA, LVDS1/VGA1, LVDS-1/VGA-1 и т.д. Чтобы посмотреть какие имена используются у вас в системе просто наберите xrandr без параметров.

2. Следующим шагом нам нужно повесить эти команды на клавишу переключения мониторов.

В первую очередь мы отключим текущее поведение данной клавиши, которое перехватывается плагином xrandr из gnome-settings-daemon:
gconftool --set /apps/gnome_settings_daemon/plugins/xrandr/active --type bool false
Примечание: тоже самое можно сделать используя графический интерфейс с помощью gconf-editor

Затем создаём новую привязку к клавише XF86Display:
gconftool --set /desktop/gnome/keybindings/switch-display/name --type string switch-display
gconftool --set /desktop/gnome/keybindings/switch-display/binding --type string XF86Display
gconftool --set /desktop/gnome/keybindings/switch-display/action --type string switch-display.sh

Примечание: тоже самое можно сделать используя графический интерфейс с помощью gnome-keybinding-properties или gconf-editor

Теперь эта клавиша должна запускать switch-display.sh, но ничего не происходит, т.к. скрипта с таким названием пока нет.

3. Создаём скрипт переключения.

Используя тот же xrandr мы будем определять включен ли экран ноутбука и в зависимости от результата выполнять переключение. Здесь же мы будем отключать и включать ждущий режим.

#!/bin/sh

LVDS=LVDS1	# could be LVDS, LVDS-1 or something else
VGA=VGA1	# could be VGA, VGA-1 or something else

# Check if LVDS is on
xrandr | grep -q "$LVDS connected (" && LVDS_IS_ON=0 || LVDS_IS_ON=1

# Switch displays
if [ $LVDS_IS_ON -eq 1 ]; then
	# VGA
	xrandr --output $VGA --auto && xrandr --output $LVDS --off
	# Disable auto-sleep on lid close
	gconftool --set /apps/gnome-power-manager/buttons/lid_ac nothing --type string && \
	gconftool --set /apps/gnome-power-manager/buttons/lid_battery nothing --type string
else
	# LVDS
	xrandr --output $LVDS --auto && xrandr --output $VGA --off
	# Enable auto-sleep on lid close
	gconftool --set /apps/gnome-power-manager/buttons/lid_ac suspend --type string && \
	gconftool --set /apps/gnome-power-manager/buttons/lid_battery suspend --type string
fi


Необходимо создать файл с текстом данного скрипта, назвать его switch-display.sh, поместить в директорию ~/bin (если директории ~/bin нет, нужно её создать) и дать права на выполнение.

4. Если директории ~/bin у вас раньше не было, то перед тем как всё заработает вам необходимо будет завершить сеанс и войти в систему снова.

5. Вот теперь всё готово, можете проверять!

Примечания


— Момет первый — все настройки мы делали для текущего пользователя, это значит, что такое переключение не будет работать как у других пользоватей системы, так и на экране входа в систему. Кроме того, так как мы не используем в данном случае ACPI (как, собственно, это делает и стандартный плагин xrandr), на заблокированном экране клавиша переключения так же работать не будет.

— Момент второй — чтобы вернуть стандартное поведение клавиши необходимо выполнить следующие команды:
gconftool --unset /desktop/gnome/keybindings/switch-display/binding
gconftool --unset /desktop/gnome/keybindings/switch-display/action
gconftool --unset /desktop/gnome/keybindings/switch-display/name
gconftool --unset /apps/gnome_settings_daemon/plugins/xrandr/active


Всё вышеописанное проверено в Ubuntu 10.04 и Ubuntu 11.04.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 52: ↑45 and ↓7+38
Comments18

Articles