Archlinux下bspwm桌面配置

Posted on

bspwm安装和设置

sudo pacman -S bspwm sxhkd

安装完成后需要在$HOME/.xinitrc中添加exec bspwm,然后通过startx即可启动。如果需要登录自动启动bspwm,可以安装启动器(如lightdm)。 本人比较喜欢使用startx这种简单的方式。如果不想装启动器,又还是想用户登录后自动启动bspwm的话,也可以在$HOME/.zprofile中添加如下代码:

if systemctl -q is-active graphical.target && [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then
  exec startx
fi

HiDPI注意事项

个人显示器是4k屏,所以需要进行额外的设置,在$HOME/.Xresources中贴下如下代码:

Xft.autohint: 0

Xft.lcdfilter:  lcddefault

# 看个人喜好,如果是1080(含)以下屏幕,
# 建议改为hintslight或者hintnone, 
# 这样不会出现歪歪扭扭的字,但是字体
# 会显得稍有些模糊。
Xft.hintstyle:  hintfull

# 开启字体自带的hinting
Xft.hinting: 1

# 开启反锯齿
Xft.antialias: 1
Xft.rgba: rgb

# 1080以下不用设置,默认是96,推荐设置:
# 150% - 144
# 175% - 168
# 200% - 192
Xft.dpi: 168

经过上述的设置后,需要将.Xresources文件通过以下命令merge到xinitrc中才能生效:

xrdb -merge ~/.Xresources

查看该命令是否成功,可以查看~/.xinitrc文件中有没有下面所列,没有话的可以手动加入

[[ -f ~/.Xresources ]] && xrdb -merge -I$HOME ~/.Xresources

对于QT程序,在~/.xinitrc中加入:

export QT_AUTO_SCREEN_SCALE_FACTOR=1

经过以上的设置,大部分程序应该都能够在4k屏下良好地显示了,可能还会有些程序会遇到一些问题,可以查看Archlinux Wiki - HiDPI条目解决。

bspwm的基本设置

bspwm需要配合sxhkd一起使用。bspwmrc是用来管理窗口设置,sxhkdrc是用来设置快捷键。这两个配置文件分别位于

  • $HOME/.config/bspwm/bspwmrc
  • $HOME/.config/sxhkd/sxhkdrc

这两个配置文件非常容易上手,下面就贴一些我常用的设置

bspwmrc设置

# 启动Compositor,主要用于一些特殊效果,如透明背景,阴影等
# 这里还可以增加一些自启动的程序,比如我还增加了fcitx
picom -b & 
fcitx &
...

# 给当前活动窗口加一个1px的红色框
bspc config border_width         1
bspc config focused_border_color "#ff0000"

# 设置窗口之间的空隙为10px
bspc config window_gap          10

# 下面为一些程序的窗口的特殊设置
# 将vlc和图片浏览设置为浮动窗口
bspc rule -a vlc state=floating
bspc rule -a Sxiv state=floating

# 虚拟机也需要使用浮动窗口
bspc rule -a "VirtualBox Manager" state=floating manage=off
bspc rule -a "VirtualBox Machine" state=floating manage=off
...

对于需要进行模式设置的窗口,但是又不知道应该用什么名称的,可以使用命令xprop | grep WM_CLASS后,用鼠标点击窗口, 然后就可以得到WM_CLASS的名称,接着就可以写到bspc rule -a后了。需要注意的是如果class的名称中有空格的话,需要使用引号将其括起来, 就像上面配置中VirtualBox Manager一样。

sxhkd设置

sxhkdrc文件也非常容易配置,整体规则就是

HotKey
    Command

这部分非常简单,根据自己喜好更改即可。由于我是从i3迁移过来的,所以一些键位习惯和i3基本相同的。

特别注意,窗口为Floating模式时,按住Super键不松开,可以用鼠标左键移动窗口位置,使用鼠标右键调整窗口大小

Terminal模拟器 alacritty

    sudo pacman -S alacritty

alacritty号称是用上了GPU加速的最快Terminal Emulator。安装后可以在配置文件$HOME/.config/alacritty/alacritty.yml中进行调整。

#设置字体
    font:
      normal:
        family: Source Code Pro
        style: Regular

      bold:
        family: Source Code Pro
        style: Bold

      italic:
        family: Source Code Pro
        style: Italic

#主题
    #...

#设置背景透明度
background_opacity: 0.8

主题可从Alacritty Wiki中找到,粘贴过来即可。

文件管理器 ranger

sudo pacman -S ranger

ranger是一个用于文件浏览与管理的CLI程序,非常适合在Tiling Window Manager下使用。ranger是用python编写的,如果介意,也可以使用golang写的lfw代替。

ranger基本操作和vim相同,j, k用来上下选择文件,h, l用来进上上级目录和子目录,如果是文件l, ENTER会打开文件或者执行文件。打开文件使用 的是rfile,而不使用系统的MIME信息。 ranger的配置文件位于$HOME/.config/ranger,具体配置方法可以查看manpage, 就我来说,默认配置就已经完全满足要求了。

图片浏览与壁纸设置

图像浏览软件使用fehsxiv, 其中feh用于设置壁纸,sxiv用于浏览图片和操作图片。要提一下的是,feh也可以用于图片的浏览,但是貌似不支持快捷键对图片进行文件操作,所以还是额外安装了sxiv用于图片的浏览和简单操作。

sudo pacman -S feh sxiv

壁纸配置 feh

feh主要用于壁纸的设置。使用命令:

feh --bg-fill IMAGE_FILEPATH
feh --bg-tile IMAGE_FILEPATH
feh --bg-scale IMAGE_FILEPATH
feh --bg-center IMAGE_FILEPATH
feh --bg-max IMAGE_FILEPATH

同时feh可以随机选择某个目录中的图片做为壁纸。使用--recursive还能同时使用子目录中的图片。

feh --bg-fill --randomize --recursive IMAGES_DIR_PATH

结合sxhkd, 可以将更换壁纸绑到到快揵键上,这样就能方便的随机切换壁纸。我一般会绑定到super+b,同时我还会绑定一个快捷键super+shift+b , 用于随机选择另一个目录中图片做为壁纸,那是一些NSFW的图片,比较适合在家里使用。在sxhkdrc中绑定

super + {_, shift +}b
    feh --recursive --randomize --bg-fill ~/Pictures/{backgrounds,nsfw}

同时在bspwmrc中添加feh,这样在启动时就可以应用壁纸。 如果需要定时切换壁纸,可以结合使用cron设置定时任务

图片浏览 sxiv

sxiv基本操作很简单,q退出, f用于全屏和窗口模式切换;在打开含有图片的目录时,space是下一图片,backspace是上一图片,更多按键请查看manpage。此处,它还支持绑定一组额外的快捷键,首先使用Ctrl+X开启,随后再使用定义的快捷键用于操作图片文件。根据Archlinux Wiki中的例子,可以在~/.config/sxiv/exec/key-handler中定义一些快捷键,别忘记了该文件要加可执行的权限。

脚本如下所示:

#!/bin/sh
while read file
do
        case "$1" in
        "C-d")
                gio trash "$file" ;;
        "C-r")
                convert -rotate 90 "$file" "$file" ;;
        "C-c")
                echo -n "$file" | xclip -selection clipboard ;;
        "C-b")
                feh --bg-fill "$file" ;;
        esac
done

其中,Ctrl+X Ctrl+D用于删除文件, Ctrl+X Ctrl+C将文件保存在X的剪贴版中,Ctrl+X Ctrl+B用于将当前图片设置为壁纸。Ctrl+X Ctrl+R则用于旋转图片。 同时安装sxiv-rifle包,这样在ranger中打开图片时,就可以同时浏览该目录下的所有文件了。

yay -S sxiv-rifle

特别的,可以将sxiv设置为Floating模式的窗口,这样可能会比较方便一些。在bspwmrc中设置sxiv窗口为Floating窗口模式

bspc rule -a Sxiv state=floating