Debian 作为开发机系统的配置 

Last Update: 2024-06-16

目录

配置前的准备

配置目标

x11 作为图形显示方式,i3 作为窗口管理程序。使用的软件尽量少,配置尽可能简单。不考虑好看,对人眼友好即可。

要安装的软件

台式机和笔记本电脑通用:

笔记本电脑专用:

x11 配置

用户级 xsession 的配置

首先需要明确,用户配置应写在 ~/.xsession 中而不是 ~/.xinitrc。

简单说来,~/.xinitrc 被 xinit 调用,而 xinit 被 startx 启动。如果 startx 找到了 ~/.xinitrc,那么系统级的 /etc/X11/xinit/xinitrc 就不被执行。而这个系统级的启动脚本又调用 /etc/X11/Xsession 做了一些其它的操作,包括调用用户级的 ~/.xsession 配置脚本,配置 DBUS 路径的环境变量等。

有时,基于 chromium 的程序无法调用 fcitx5 输入法的原因就是指明 DBUS 路径的环境变量 DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u) /bus" 不存在。

所以,要在避免系统级的启动脚本被覆盖的同时,还要执行用户级的配置脚本的话,就要把用户级的配置写在 ~/.xsession 中。

此外,startx 通常在用户通过 console 登入后启动图形界面时被调用。但如果用户通过 DM(display manager)登入,那么只有在使用用户自定义 session 时,DM 才会去执行 ~/.xsession 文件。具体可以看 /usr/bin/startx 这个脚本的实现逻辑。

开启 intel 核显的垂直同步

在 /etc/X11/xorg.conf.d/intel.conf 中写:

Section "Device"
  Identifier "Intel Graphics"
  Driver "intel"
  Option "TearFree" "true"
EndSection

触摸板设置

给触摸板配置单指单击模拟鼠标左键,双指单击模拟鼠标右键。

卸载 xserver-xorg-input-synaptics 安装 xserver-xorg-input-libinput。

并在 /etc/X11/xorg.conf.d/ 目录下创建文件 40-libinput.conf,内容为:

Section "InputClass"
    Identifier "libinput touchpad catchall"
    MatchIsTouchpad "on"
    MatchDevicePath "/dev/input/event*"
    Driver "libinput"
    Option "Tapping" "on"
EndSection

i3 配置

不显示标题栏

没有办法完全让标题栏消失,只能通过将标题栏的高度设置为 1px 的方式来让标题栏在视觉上被忽略。配置为:

# ~/.config/i3/config
for_window [class='^."] border pixel 1

将 urxvt 设置为默认终端模拟器

$mod+Return 会执行 /usr/bin/i3-sensible-terminal 这个脚本,这个脚本内写有如何选择 terminal 程序的逻辑。

这个脚本先判断 $TERMINAL 环境变量是否有设置,如果设置了,先尝试使用环境变量中指定的程序,所以只要设置这个环境变量的值为对应的 terminal 程序即可。而这个环境变量可以在 ~/.bashrc, ~/.xsession 和 ~/.config/i3/config 被设置,但考虑到如果没有i3 环境,就只剩 tty 了,而 tty 不需要 terminal 程序,所以最终决定将环境变量的配置写在 ~/.config/i3/config 中,即,在 i3 启动或重启时,设置环境变量:

# ~/.config/i3/config
exec_always --no-startup-id export TERMINAL=urxvt

输入法配置

Fcitx5 的主题配置放在 ~/.local/share/fcitx5/themes 中,每个主题使用一个子目录。使用 fcitx5-configtool 可以调出 Fcitx5 的配置界面。

Rime 输入法的方案配置放在 ~/.local/share/fcitx5/rime 目录中。

rime_deployer 是 Rime 输入法的部署命令,部署使用 --build 参数,后面接 user_data_dir,fcitx5 默认为 ~/.local/share/fcitx5/rime,所以 staging_dir 是 ~/.local/share/fcitx5/rime/build;shared_data_dir 是存放 rime 默认 schema 数据的地方,默认是 /usr/share/rime-data。部署指令就是:

rime_deployer --build \
              ~/.local/share/fcitx5/rime/ \
              /usr/share/rime-data \
              ~/.local/share/fcitx5/rime/build

rime_deployer - h 可查看全部参数)

要让 fcitx5 在多个图形环境中正常工作还要在 ~/.xsession 中导出以下环境变量:

export INPUT_METHOD=fcitx5
export GTK_IM_MODULE=fcitx5
export QT_IM_MODULE=fcitx5
export XMODIFIERS=@im=fcitx5

要让 fcitx5 随 i3 启动,还要在 i3 配置文件 ~/.config/i3/config 中写入 fcitx5 的启动命令:

exec_always --no-startup-id fcitx5

声音系统配置

配置 PulseAudio

PulseAudio 用户级配置的目录为 $XDG_CONFIG_HOME/config 即 ~/.config/pulse。

默认配置中,PulseAudo daemon 在所有 client 断开到它的连接后,一段时间内没有新的 client 连入时,会自动退出。需要 daemon 的时候 client 会通过 dbus 再启动它。这个功能可以在 daemon.conf 中关闭。

列出所有的声卡

pacmd list-sinks | grep -e 'name:' -e 'index:' 输出的 name 字段的值就是各设备的设备名,可以用它来识别设备。

调整声音的方式

如果键盘支持的话,调整音量可以通过功能键来完成。这在 i3 配置中可以这样写:

# Use pactl to adjust volume in PulseAudio.
set $refresh_i3status killall -SIGUSR1 i3status
bindsym XF86AudioRaiseVolume exec --no-startup-id \
    pactl set-sink-volume @@DEFAULT_SINK@@ +5% && $refresh_i3status
bindsym XF86AudioLowerVolume exec --no-startup-id \
    pactl set-sink-volume @@DEFAULT_SINK@@ -5% && $refresh_i3status
bindsym XF86AudioMute exec --no-startup-id \
    pactl set-sink-mute @@DEFAULT_SINK@@ toggle && $refresh_i3status
bindsym XF86AudioMicMute exec --no-startup-id \
    pactl set-source-mute @@DEFAULT_SOURCE@@ toggle && $refresh_i3status

屏幕显示配置

长时间无活动自动息屏

X 提供了两种屏幕空白模式: BlankTimeDPMS (display power management signaling)。

BlankTime 是 "假的" 屏幕空白: 屏幕变黑,但背光和电源仍然保持开启。这并不会减少电力消耗。可以将其视为一种非常单调的屏幕保护程序。默认的超时时间是 10 分钟。

在现在的 Xorg 版本中,BlankTime 已经消失,取而代之的是 Screen Saver。可配置项有 prefer blanking, allow exposures, timeoutcycle

Screen Saver 的工作方式和 BlankTime 不同:

DPMS 仅适用于支持此类电源管理的显示器,多数现代显示器都支持。它包括三个配置项:

可以通过 xset -q 查询这两种设置。输出中的这两段就是它们对应的配置:

...
Screen Saver:
  prefer blanking:  yes    allow exposures:  yes
  timeout:  0    cycle:  600
...
DPMS (Energy Star):
  Standby: 0    Suspend: 3600    Off: 3600
  DPMS is Enabled
  Monitor is On

注: 单执行 xset 可以看到全部的可配置项。

从功能上来说,只需要 DPMS 即可实现长时间无活动自动息屏的动作,但有些老硬件并不支持 DPMS。所以,需要测试。

sleep 1; xset s activate 延迟一秒后进入使屏幕保护模式,如果有屏幕保护程序的话,激活它。如果使用了老版本的 x11,sleep 不能不写,因为早先的 X 在事件顺序上有些混乱,它会 blank 屏幕后立即取消 blank,因为 xset s active 命令先使得屏幕进入保护模式后,这个命令又被识别成了活动操作,所以马上又退出了屏幕保护模式。

sleep 1; xset dpms force off 将在延迟一秒后关闭屏幕。也能用 standby, suspend 或 on 来代替 off。到暗光环境观察,屏幕关闭了吗?完全关闭了吗?没有背光?如果没有背光,那么当前硬件支持 DPMS。在有些硬件环境中,Xorg 使用 DPMS 时并没有真正使 DPMS 生效,它只是使屏幕变黑,背光仍然亮着。

如果当前硬件支持 DPMS,那么先使用 xset dpms 0 3600 3600 设置屏幕息屏时间,后用 xset s off 关闭 Screen Saver 模块。0 3600 3600 分别对应 Standby: 0, Suspend: 3600, Off: 3600。把 Suspend 和 Off 都用 3600 是因为,触发 Suspend 的时候,背光已经没有了,而背光消耗了多数电量,关背光后进不进 Off 状态已经没那么重要了,索性就让显示器直接关闭所有电源。

如果当前硬件不支持 DPMS,此时只能用 Screen Saver 模块了。先用 xset -dpms 来关闭 DPMS 模块 (xset +dpms 是开启 DPMS 模块),再用 xset s 3600 600 配置 3600 秒没有活动就关闭屏幕,每 10 分钟切一次屏幕保护程序的模式。

如果显示器支持 DPMS,那么把 DPMS 的配置 xset dpms 0 3600 3600 和关闭 Screen Saver 的配置 xset s off 写进 i3 的配置文件即可:

exec_always --no-startup-id xset s off
exec_always --no-startup-id xset dpms 0 3600 3600