我有两个输出(并排)并且我正在使用 i3-wm。我想创建 shell script 脚本,它运行:
# if output <BBB> is connected, but off
xrandr --output <BBB> --right-of <AAA> --mode 1920x1080
# if output <BBB> is connected, and on
xrandr --output <BBB> --off
我正在切换显示器配置以实现更好的游戏性能(FPS 提高大约 5-15%)
答案1
这应该有效:
xrandr --listactivemonitors | grep <BBB> >/dev/null && xrandr --output <BBB> --off || xrandr --output <BBB> --right-of <AAA> --mode 1920x1080
解释:
xrandr --listactivemonitors
仅打印当前打开的监视器。grep <BBB> >/dev/null
在先前的输出中搜索我们要切换的监视器的名称。如果找到,grep 将返回 shell 解释为 true 的退出代码。如果没有找到,它将返回 shell 解释为 false 的退出代码。输出被发送到 /dev/null 以避免屏幕混乱。&& xrandr --output <BBB> --off
如果 grep 在活动监视器列表中找到监视器,那么它将运行,关闭监视器。但是,如果 grep 以错误的退出代码退出,那么这将不会运行,因为无论它的计算结果是什么,逻辑 and 子句作为一个整体已经知道是错误的。|| xrandr --output <BBB> --right-of <AAA> --mode 1920x1080
如果 grep 没有找到它,那么该子句将运行,打开监视器。它运行是因为前一个子句 (grep ... && xrandr ...
) 的计算结果为 false。为了知道这个逻辑 or 子句是否为真,shell 必须计算右侧。另一方面,如果左侧已经计算为 true,则无需计算右侧,因此不会执行。
这是一篇简洁的文章由逻辑条件介导的控制流。
答案2
如果您想在非绝对必要时避免使用 tmpfile,请尝试以下操作(LVDS-1
:笔记本电脑显示器,VGA-1
:外部显示器):
#!/bin/sh
switchDisplay() {
/usr/bin/xrandr --auto && /usr/bin/xrandr --output "$1" --off
}
case "$0" in
*-off)
switchDisplay "VGA-1";
;;
*-on)
switchDisplay "LVDS-1";
;;
*-toggle)
### Debian Buster xrandr man page is missing critical information.
### xrandr --listactivemonitors
### Monitors: 1
### 0: +VGA-1 1920/509x1080/286+0+0 VGA-1
/usr/bin/xrandr --listactivemonitors | /bin/grep -q "VGA-1" 1>/dev/null 2>&1
if test "$?" -eq 0; then
switchDisplay "VGA-1"; ### VGA active, turn it off.
else
switchDisplay "LVDS-1"; ### VGA inactive, turn it on.
fi;
;;
esac;
脚本在(ie )ext-on
中调用,并且,是到 ext-on 的符号链接。适应您的需求。$PATH
~/.local/bin
ext-off
ext-toggle
为了方便 i3wm 用户使用Fn+
-key 组合,添加到~/.config/i3/config
:
bindsym XF86Display exec --no-startup-id ~/.local/bin/ext-toggle
奇迹般有效。永远不让我失望 ;)
干杯
答案3
请检查此链接:
https://faq.i3wm.org/question/5312/how-to-toggle-onoff-external-and-internal-monitors.1.html
该脚本是用 bash 编写的,并给出了如何在 i3 配置文件上设置快捷键。