i3wm подключение и отключение дополнительного монитора - igancev blog

i3wm подключение и отключение дополнительного монитора

В i3 нет никаких настроек по управлению мониторами. Напишем bash скрипт, который будет помогать с подключением и отключением второго монитора, а также повесим его на горячую клавишу в i3wm.

Если включить компьютер с подключенным кабелем монитора, например HDMI, то дополнительный монитор самостоятельно активируется, и будет показывать. Но в дальнейшем если его отключить, то автоматически все не перестроится. Курсор мыши будет уходить в пустоту, и рабочие столы i3 так и останутся на уже отключенном мониторе. Для решения ситуации долгое время я в консоли постоянно набирал вручную команды xrandr:

Выключение показа монитора

xrandr --output HDMI-2 --off

Включение показа монитора

xrandr --output HDMI-2 --mode 1920x1080 --pos 1920x0

Это работает, но и как сами понимаете, это довольно неудобно. Сильно по этому поводу не заморачивался поиском, просто как - то раз вечерком решил накидать bash скрипт, автоматизирующий именно это поведение. Задумка изначально состояла в том, чтобы по нажатию горячей клавиши включать второй монитор, если он не включен, или наоборот, выключать, если он включен.

Файл ~/bin/monitorToggle

#!/bin/bash

connected=$(xrandr | grep 'HDMI-2 connected')

# подключен ли монитор
if [[ -z "$connected" ]]; then
    echo 'Монитор не подключен'

    # выключим отображение, если вдруг оно активно (просто был выдернут шнур)
    xrandr --output HDMI-2 --off
else
	# монитор подключен
	# проверим отображается ли он
	displayed=$(xrandr | grep 'HDMI-2 connected 1920x1080+1920+0')

	if [[ -z "$displayed" ]]; then
		# не отображается, включим отображение
		echo 'не отображается, включим отображение'
		xrandr --output HDMI-2 --mode 1920x1080 --pos 1920x0
	else
		# отображается, выключим отображение
		echo 'отображается, выключим отображение'
		xrandr --output HDMI-2 --off
	fi
fi

Скрипт отнюдь не универсальный. Захардкожены наименование монитора (HDMI-2), выходное разрешение (1920x1080), и позиция, на которую устанавливается второй монитор (1920x0) относительно первого экрана. Не идеальны и сами проверки, определяющие факт физического подключения кабеля, и наличие активного вывода изображения на экран в текущий момент. Но это не особо важно, когда он просто работает, и выполняет то, что я от него и ожидал. И самое главное, когда он был написан вместе с этой статьей за пару часов :-)

После отладки скрипта в консоли, привязываем его запуск к удобному сочетанию горячей клавиши (для меня удобным показалось $mod + F12)

vim ~/.config/i3/config

### где вставляем привязку хоткея
bindsym $mod + F12 exec /home/igancev/bin/monitorToggle

Хоть папка ~/bin включена в $PATH, почему - то хоткей не хочет работать без указания полного пути, поэтому так.

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

Если знаете более простой и/или удобный способ решения подобных задач в рамках окружения i3wm - буду очень рад, если поделитесь :-)