Чтобы сформулировать вашу функцию bash, вы должны сначала узнать подключенные экраны с помощью этой команды.
xrandr --current
Он покажет вам вывод, похожий на этот
Screen 0: minimum 8 x 8, current 1600 x 900, maximum 32767 x 32767
eDP1 connected 1600x900+0+0 (normal left inverted right x axis y axis) 380mm x 210mm
1600x900 60.04*+ 59.82 39.99
1400x900 59.96 59.88
1368x768 60.00 59.88 59.85
1280x800 59.81 59.91
1280x720 59.86 60.00 59.74
1024x768 60.00
1024x576 60.00 59.90 59.82
960x540 60.00 59.63 59.82
800x600 60.32 56.25
864x486 60.00 59.92 59.57
800x450 60.00
640x480 59.94
720x405 59.51 60.00 58.99
640x360 59.84 59.32 60.00
HDMI1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
Как видите, у меня есть 2 выхода eDPI1
(экран моего ноутбука) и HDMI1
мой внешний монитор, который в данный момент отключен.
Теперь с этими переменными я могу написать функцию, которая переключается с зеркала на расширение и обратно.
#!/bin/bash
export SCREEN_STATE="extended"
function screenToggle() {
if [[ $SCREEN_STATE == "extended" ]]; then
xrandr --output eDPI1 --output HDMI1 --same-as eDPI1
export SCREEN_STATE="mirrored"
else
xrandr --output eDPI1 --output HDMI1 --left-of eDPI1
export SCREEN_STATE="extended"
fi
}
Обратите внимание, что я не тестировал этот код, и при первом запуске дисплеи перейдут в зеркальный режим из-за второй строки, и вы не сможете изменить это поведение.
Дополнительные значения, которые вам, возможно, понадобится передать для управления разрешением, см. man xrandr
и этот аналогичный вопрос .