我用bspwm做我的窗口管理器。我已经在我的台式机上使用了很长时间,现在我也在我的笔记本电脑上使用它,但是在这里它更难操作。
我使用一个叫做蒙斯的工具来自动处理我的“屏幕布局”。我在bspwmrc上作为守护进程运行它,当我拔出外部监视器时,它会自动更改为仅为笔记本电脑屏幕。好的。
问题是,我的笔记本电脑有两个显卡: AMD集成和Nvidia专用。事情是这样的,对于xrandr我有:
eDP-1DP-1DP-2HDMI-1eDP-1-1DP-1-1DP-1-2HDMI-1-1为了使它更简单,我需要区分如下:
eDP-1))eDP-1-1)我想告诉grep关于xrandr结果的bspwm,并相应地分配我的工作区。如果手动完成,我将运行:
我如何写一个if / else决定来检查是否存在eDP-1、DP-1、eDP-1-1或DP-1-1,并采取相应的行动?
我真的不知道任何bash,脚本或编程,所以我真的不知道如何使它正确。你们能帮帮我吗?
我希望我能解释清楚!
P.S.:在DP前面的^是grep --一条以大写P开头的<#>行,否则它也会找到笔记本屏幕。
发布于 2022-09-16 22:52:57
经过几个小时的尝试和失误,我终于做到了。我还学会了如何在脚本上使用if语句,所以这是值得的。
决议如下:
amddp=$(xrandr --query | grep '^DP-1')
nvidiadp=$(xrandr --query | grep '^DP-1-1 connected')
if [[ $amddp = *\ connected* ]]; then
bspc monitor eDP-1 -d I II III IV V
bspc monitor DP-1 -d VI VII VIII IX X
elif [[ $nvidiadp = *\ connected* ]]; then
bspc monitor eDP-1-1 -d I II III IV V
bspc monitor DP-1-1 -d VI VII VIII IX X
else
bspc monitor -d I II III IV V VI VII VIII IX X
fi要理解它一点:
^DP-1时(这意味着一行以DP-1开头,以避免笔记本电脑的eDP-1屏幕)。= *\ connected*时,它的意思是等于:*任何字符或一组字符(我使用了它,因此不必在脚本上写入grep命令将输出的整行)。\ (反斜杠空间)实际上是指空格字符。否则,当我断开监视器时,它仍然会出现在为*connected*打招呼时,因为“断开”包括它上的“连接”一词。我还使用相同的结构启动不同的polybar.sh脚本,以启动笔记本显示器上的一个条(一个.sh用于nvidia,一个用于amd),或者两个条,一个在膝上型计算机上,一个在外部监视器上。每个.sh指向相应的多条的一个或两个configs.ini。
希望它能帮到别人!
https://unix.stackexchange.com/questions/717588
复制相似问题