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