十一月 17, 2020

基于bspwm的桌面环境搭建

自打入手mss(Maxtor Shared Storage Plus)以来,也算是个linux用户。不过这将近十年的时间里都没正经用过linux桌面,一方面是自己所需的大部分应用在ssh+网页界面的情况下都可以搞定,比如transmission、jellyfin、calibre-web等等;另一方面也是早期阶段linux的桌面有点复杂,浅尝辄止的试用阶段中也被搞崩过好几次。

最近一段时间没怎么打游戏,开了windows就是jupyter+vscode,正好又听说微软官方发布了vscode的arm版,就决定搞个raspberry pi好好跑下linux的桌面,折腾一通manjaro官方镜像的xfce、i3、bspwm之后,梳理一下思路,为下次继续折腾做准备。

平时使用的各种桌面环境集成程度比较高,在linux下,几个构成组件可以根据需要拆分组合运行。

桌面环境的构成组件

  • 窗口管理:桌面环境最基础的组件,后续的组件一般由窗口管理程序引导运行。窗口管理的方式分为层叠和平铺:windows祖传的层叠,在win10以后通过win+左右方向键也可以快速平铺显示;不过作为平铺窗口管理器,指的一般都是没有最小化和窗口大小调整,所有程序最大化,新建程序后自动分屏,永远铺满整个屏幕,和安卓的多任务分屏类似。gnome、kde、xfce都是层叠,i3和bspwm是平铺窗口。

  • 启动器:对windows来说就是桌面程序图标+快速启动+快捷键+开始菜单,第三方的搜索启动程序比如launchy和listary也有很多支持者,win10之后的win+s也能作为半个启动器使用。xfce的启动器和windows比较类似,i3和bspwm的启动器组合一般都是dmenu+常用程序快捷键。

  • 状态栏:以windows为例,状态栏上会有开始按钮、快速启动、当前运行的程序标签、输入法、音量、网络、时间等等。而配合平铺窗口管理器的状态栏程序,示例配置中一般都只是工作区清单和一堆系统信息,其他都得另外实现和配置。i3打包程序里有个i3statusbar,也可以换其他的;bspwm可选项比较多,我用的是polybar。

  • 通知:windows自然是有的,三大件也是有的。其他万一没有的得装dunst。

  • 快捷键:windows的win键搭配有一整套快捷键组合程序,比如大家都离不开的win+d、win+e和alt+tab这些;i3wm自带了快捷键的响应,在自己的配置文件内可以编辑各项动作;继续简化的bspwm则需要另外的程序sxhkd来接管快捷键。顺便说一句,manjaro官网上的raspberry-pi-i3wm镜像的默认快捷键配置一团糟,甚至都把tmux的快捷键给搞乱了,记得避雷。

  • 桌面:多屏幕、分辨率、壁纸、透明。平铺窗口管理器的工作区模式和多屏幕配合一般非常好;分辨率调整使用xrandr或者其gui程序arandr;不带壁纸设置的wm一般可以用feh来设置桌面;透明度设置是linux美化的重灾区,之前流行的compton已经没人维护,现在在更新的picom是它的一个fork。

  • 常用基本程序:有一些程序过于习以为常,有时候会忘记它居然是得另外配的。

    • 文件管理器 :平铺窗口管理器还是用些简单明快的thunar;或者使用cli的ranger。
    • wifi连接:manjaro的xfce镜像带了nm-applet,或者用命令行的iw
    • 蓝牙连接:blueman-applet。命令行连蓝牙就有点说不过去,对自己好一点。
    • 电源:状态栏程序显示电源也是强项。
    • 输入法:fcitx

bspwm的安装和配置过程

  1. 我用manjaro打包的xfce,默认用lightdm作为登录管理,抛开display manager的话,在x和wm安装完后也可以用ctrl+alt+f1/f2/f3...切换到对应的tty,命令行登录后自己用which bspwm找出路径,然后startx /usr/bin/bspwm来启动桌面。

  2. 安装bspwm、sxhkd

sudo pacman -S bspwm sxhkd install -Dm755 /usr/share/doc/bspwm/examples/bspwmrc ~/.config/bspwm/bspwmrc install -Dm644 /usr/share/doc/bspwm/examples/sxhkdrc ~/.config/sxhkd/sxhkdrc

默认配置下进去bspwm,只会看到一个黑乎乎的桌面,得按照上面的介绍继续挨个安装和配置组件。

  1. dmenu

安装dmenu自己或者它的一堆fork,sudo pacman -S dmenu,sxhkd默认的配置是super+space启动dmenu_run.

当然也可以用rofi。

  1. 终端和浏览器:

    • sxhkd默认配置的终端是urxvt,如果想用其他的或者调整习惯快捷键记得修改配置文件的super+enter部分
    • 浏览器装完后添加一个快捷键,比如alt+i到firefox之类,
  2. polybar

polybar得通过aur安装,yay -S polybar,拷贝默认配置,没有目录记得新建,cp /usr/share/doc/polybar/config ~/.config/polybar/

按照archwiki的建议,写个启动脚本,注意倒数第二行的mybar指的是polybar的配置名称,如果先试用默认配置记得改成example

#!/bin/bash # Terminate already running bar instances killall -q polybar # Wait until the processes have been shut down while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done # Launch Polybar, using default config location ~/.config/polybar/config polybar mybar & echo "Polybar launched..."

保存启动脚本chmod +x,然后把这个脚本路径比如是 $HOME/.config/polybar/launch.sh新建一行添加到bspwmrc里

这样进去后,桌面就有点样子了,其他的根据需要自己补上。