В 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 - буду очень рад, если поделитесь :-)