Thinkpad P14s 的 archlinux 成长手册(i3-wm 窗口管理器)


Archlinux 的安装可以看我之前的博客:虚拟机内使用 archinstall 安装 arch linux 2024.01.01

  • Archlinux 每个月都会发布一个版本,最终都是要升级上来的,初次安装,可以直接使用当月最新版本,安装步骤基本没差别
  • 后面的操作会用到 aur 源,可以从上面的博客里面找到安装的方法

电脑信息

参考这个博客做的美化处理:i3 窗口管理器终极定制指南

配置文件也放到了 gitee 上了

i3-wm 快捷键

按键绑定 描述
Mod + Enter 打开终端
Mod + ← 切换到左侧窗口
Mod + → 切换到右侧窗口
Mod + ↑ 切换到上方窗口
Mod + ↓ 切换到下方窗口
Mod + Shift + ← 将窗口移动到左侧
Mod + Shift + → 将窗口移动到右侧
Mod + Shift + ↑ 将窗口移动到上方
Mod + Shift + ↓ 将窗口移动到下方
Mod + f 将焦点窗口切换到全屏模式
Mod + v 下一个窗口将垂直放置
Mod + h 下一个窗口将水平放置
Mod + s 启用堆叠式窗口布局
Mod + w 启用选项卡式窗口布局
Mod + Shift + Space 启用浮动窗口(针对焦点窗口)
Mod + 鼠标左键单击 使用鼠标拖动整个窗口
Mod + 0-9 切换到另一个工作区
Mod + Shift + 0-9 将窗口移动到另一个工作区
Mod + d 打开应用程序启动器(D 菜单)
Mod + Shift + q 关闭焦点窗口
Mod + Shift + c 重新加载 i3 配置文件
Mod + Shift + r 重启 i3 窗口管理器
Mod + Shift + e 退出 i3 窗口管理器

分辨率调整

安装 X 窗口系统

sudo  pacman -S xorg-server xorg-xrandr

查看显示器情况

xrandr

可以看到,当前的分辨率是 1024x768

Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
eDP connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 309mm x 174mm
   1920x1080     60.02 +  48.00
   1680x1050     60.02
   1280x1024     60.02
   1440x900      60.02
   1280x800      60.02
   1280x720      60.02
   1024x768      60.02*
   800x600       60.02
   640x480       60.02
HDMI-A-0 disconnected (normal left inverted right x axis y axis)
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
DisplayPort-1 disconnected (normal left inverted right x axis y axis)

手动修改分辨率(这里必须是字母 x,不能是 *,会无法识别),如果是分屏,哪个要设置为主窗口,只需要加上 --primary 参数

xrandr --output eDP --mode 1920x1080 --rate 60.02

在 i3 配置文件里面加上上面的命令实现永久更改分辨率

exec_always --no-startup-id xrandr --output eDP --mode 1920x1080 --rate 60.02

终端版文件管理器

ranger 是一个基于文本的文件管理器,使用 Python 编写,可以预览图片

sudo pacman -S ranger

壁纸设置

feh 可以查看图片,也可以用来设置桌面壁纸

sudo pacman -S feh

设置壁纸

feh --bg-scale /path/to/image.jpg

可以加入到 i3 的配置文件里面,这样可以保证每次开机之后,都会设置壁纸

exec_always --no-startup-id feh --bg-scale /path/to/image.jpg

触摸板配置

复制配置文件

sudo cp /usr/share/X11/xorg.conf.d/40-libinput.conf /etc/X11/xorg.conf.d/

找到 touchpad 添加下面的参数

Option "Tapping" "on"

完整的配置文件参考

Section "InputClass"
        Identifier "libinput touchpad catchall"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
        Driver "libinput"
        Option "NaturalScrolling" "true"
        # EndSection 前面加上下面这行内容开启触摸板轻点单击
        Option "Tapping" "on"
EndSection

合盖后不休眠

  • logind.conf.5
  • 其中几个参数
    • HandlePowerKey: 按下电源键后的行为,默认 power off
    • HandleHibernateKey: 按下休眠键后的行为,默认 hibernate
    • HandleLidSwitch: 合上笔记本盖后的行为,默认 suspend
  • 参数可选配置
    • ignore
    • poweroff
    • reboot
    • halt
    • kexec
    • suspend
    • hibernate
    • hybrid-sleep
    • suspend-then-hibernate
    • sleep
    • lock
    • factory-reset
sudo sed -i 's/^HandleLidSwitch=.*/HandleLidSwitch=lock/g' /etc/systemd/logind.conf
sudo sed -i 's/^#HandleLidSwitch=.*/HandleLidSwitch=lock/g' /etc/systemd/logind.conf

重启一下

reboot

i3 配置文件

mkdir ~/.config/i3
cp /etc/i3/config ~/.config/i3

截图工具

sudo pacman -S flameshot

通过 i3 配置文件,配置 flameshot 的快捷键

# flameshot
bindsym $mod+Shift+a exec flameshot gui

剪切板

面向 Linux 的 10 款最佳剪贴板管理器

i3 的工作区之间的数据是不互通的,需要通过剪切板来跨工作区复制粘贴内容

  • 我这里用的是 copyq,他支持中文
sudo pacman -S copyq

copyq 的全局快捷键会影响 vim 的列编辑,两个 ctrl+v 有冲突,可以在 copyq 的设置里面,确认程序里面有 ctrl+v 快捷键,可以把全局里面的 ctrl+v 快捷键删了就行

i3lock-color

自带的 i3lock 比较丑,锁屏之后是灰色的纯色页面,直接输入密码后回车,就能解锁

卸载 i3lock

sudo pacman -R i3lock

安装 i3lock-color

yay -S i3lock-color

定义配置文件

mkdir ~/.config/i3/scripts

创建一个名字是 i3lock-color 的文件(名字自己定义),里面的颜色,也可以自己配置和调整

#!/bin/sh

BLANK='#00000000'
CLEAR='#ffffff22'
DEFAULT='#00897bE6'
TEXT='#00897bE6'
WRONG='#880000bb'
VERIFYING='#00564dE6'

i3lock \
--insidever-color=$CLEAR     \
--ringver-color=$VERIFYING   \
\
--insidewrong-color=$CLEAR   \
--ringwrong-color=$WRONG     \
\
--inside-color=$BLANK        \
--ring-color=$DEFAULT        \
--line-color=$BLANK          \
--separator-color=$DEFAULT   \
\
--verif-color=$TEXT          \
--wrong-color=$TEXT          \
--time-color=$TEXT           \
--date-color=$TEXT           \
--layout-color=$TEXT         \
--keyhl-color=$WRONG         \
--bshl-color=$WRONG          \
\
--screen 1                   \
--blur 9                     \
--clock                      \
--indicator                  \
--time-str="%H:%M:%S"        \
--date-str="%A, %Y-%m-%d"       \
--keylayout 1                \

文件增加执行权限

chmod +x ~/.config/i3/scripts/i3lock-color

i3 配置文件增加锁屏配置

# 锁屏快捷键
bindsym $mod+x exec ~/.config/i3/scripts/i3lock-color

锁屏效果(作者那边直接复制的)

i3 主题和图标修改

  • materia-gtk-theme:上游推荐的 GTK 主题
  • papirus-icon-theme:主题的图标
  • lxappearance:图标的图形化管理工具
  • 安装后的操作就不展示了,可以看源文档
sudo pacman -S materia-gtk-theme papirus-icon-theme lxappearance

i3 工作区配置

默认的工作区是纯数字,不太好看,先安装字体

sudo pacman -S ttf-font-awesome

Awesome 字体 icons

找到自己想要的 icon(或者直接搜索,比如 memory),点击后,选择一个喜欢的样式,单机就会复制,然后粘贴到 i3 配置文件里面

分配应用程序到工作区

打开要分配的应用,同时再打开一个终端,输入 xprop 命令,获取到应用的 WM_CLASS 名称

例如这里面看到的是 firefox

WM_CLASS(STRING) = "Navigator", "firefox"

在 i3 的配置文件里面增加下面的内容,表示将 firefox 分配到工作区2,下面的内容是做参考的,以自己实际的需要为准

  • 可以在后面加上 floating enable 表示这个应用以悬浮窗的形式打开(默认是全屏,新进程以 split 的方式分屏展示)
for_window [class="firefox"] move to workspace $ws2

工作区字体修改

sudo pacman -S ttf-ubuntu-font-family

找到 font pango:monospace 8 这一行,修改成下面的内容,数字代表字体的大小,根据自己的显示情况调整

font pango:Ubuntu Regular 10

i3 启用透明效果

安装 picom 来配置透明效果和动画效果

sudo pacman -S picom

创建配置文件

mkdir ~/.config/picom
cp /usr/share/doc/picom/picom.conf.example ~/.config/picom/picom.conf

修改配置文件

picom 配置文件

picom window_rules

rules: ({
  match = "window_type = 'tooltip'";
  fade = false;
  shadow = true;
  opacity = 0.75;
  full-shadow = false;
}, {
  match = "window_type = 'dock'    || "
          "window_type = 'desktop' || "
          "_GTK_FRAME_EXTENTS@";
  blur-background = false;
}, {
  match = "window_type != 'dock'";
  # shader = "my_shader.frag";
}, {
  match = "window_type = 'dock' || "
          "window_type = 'desktop'";
  corner-radius = 0;
}, {
  match = "name = 'Notification'   || "
          "class_g = 'Conky'       || "
          "class_g ?= 'Notify-osd' || "
          "class_g = 'Cairo-clock' || "
          "_GTK_FRAME_EXTENTS@";
  shadow = false;
  # 配置文件里面有 rules 的,可以只需要下面这一段内容
  # class_g 和上面的 class 是一样的,通过 xprop 命令获取 WM_CLASS 的第二个字段
  # 我这里是针对 terminal 和 vscode 以及 dock 做了透明处理
}, {
  match = "window_type = 'dock'    || "
          "class_g = 'UXTerm'";
  fade = false;
  shadow = true;
  opacity = 0.7;
  full-shadow = false;
}, {
  match = "class_g = 'code-oss'";
  fade = false;
  shadow = true;
  opacity = 0.8;
  full-shadow = false;
})

WINDOW_TYPE 总共有15 种可以选择

  1. unknown
  • 表示未知窗口类型,通常是默认值。如果窗口的类型未被明确指定,则可能使用此类型。
  1. desktop
  • 表示桌面窗口,通常用于显示桌面背景或桌面环境的根窗口。
  1. dock
  • 表示停靠栏窗口,例如任务栏或面板,通常用于显示快捷方式、系统托盘等。
  1. toolbar
  • 表示工具栏窗口,通常用于应用程序中的工具栏,提供快速访问功能的按钮。
  1. menu
  • 表示菜单窗口,通常是应用程序中主菜单栏的一个下拉部分。
  1. utility
  • 表示实用窗口,通常是辅助工具窗口,例如设置窗口或属性窗口。
  1. splash
  • 表示启动画面窗口,通常用于显示应用程序启动时的过渡画面。
  1. dialog
  • 表示对话框窗口,通常用于与用户交互的小型窗口,如 “保存文件” 或 “确认” 窗口。
  1. normal
  • 表示普通窗口,通常是用户运行的标准应用程序窗口。
  1. dropdown_menu
  • 表示下拉菜单窗口,例如从菜单栏或右键菜单弹出的下拉选项列表。
  1. popup_menu
  • 表示弹出菜单窗口,类似于右键菜单或上下文菜单,但通常是更独立的弹出菜单。
  1. tooltip
  • 表示工具提示窗口,通常是当用户悬停在按钮或控件上时出现的小提示框。
  1. notification
  • 表示通知窗口,通常是弹出的系统或应用通知提示。
  1. combo
  • 表示组合框窗口,通常是用于选择多个选项之一的控件,例如下拉框的扩展部分。
  1. dnd
  • 表示拖放窗口(Drag-and-Drop),通常用于在拖放操作中显示拖动的内容或目标位置。

修改 i3 配置文件

增加下面的内容,重启的时候都会开启 picom (picom 的配置文件修改后,会立刻生效,调试很方便)

exec_always --no-startup-id picom -f --config ~/.config/picom/picom.conf

i3status

i3 有两种状态栏,一个是 i3status,一个是 i3blocks,当然,还有第三方的 polybar,看大家自己需求去选择

  • i3status 有固定的内置模块,无法定制化,最多加一些图标之类的
  • i3blocks 是通过 command 来处理的,可以执行脚本,可玩性更高,但是性能需要自己注意
特性 i3status i3blocks
上手难度 简单 较高
性能开销 较高
可定制性 限制较多 强大
动态更新 较弱 优秀
美观性 基本布局 灵活布局
脚本支持 无(或有限) 强大,支持任意脚本语言

我这边需求不高,直接使用 i3status

  • ipv6
  • disk /
  • run_watch DHCP
  • run_watch VPNC
  • path_exists VPN
  • wireless wlan0
  • ethernet eth0
  • battery 0
  • cpu_temperature 0
  • memory
  • load
  • tztime local
  • tztime berlin

具体配置可以看官方文档,下面是我的配置文件

general {
        colors = true
        interval = 5
}

# order += "ipv6"
order += "wireless _first_"
# order += "ethernet _first_"
order += "load"
order += "memory"
order += "disk /"
order += "battery all"
order += "tztime local"

wireless _first_ {
        format_up = " (%essid) %ip"
        # format_up = "WLAN: (%quality at %essid) %ip"
        format_down = "WLAN: down"
}

ethernet _first_ {
        format_up = "E: %ip (%speed)"
        format_down = "E: down"
}

battery all {
        format = "%status %percentage"
        # format = "%status/%percentage/%remaining"
        status_chr = ""
        status_bat = ""
}

disk "/" {
        format = " %avail"
}

load {
        format = " %1min/%5min/%15min"
}

memory {
        format = " %used/%available"
        threshold_degraded = "1G"
        format_degraded = "MEMORY < %available"
}

tztime local {
        format = " %Y-%m-%d %H:%M"
        # format = "%Y-%m-%d %H:%M:%S"
}

i3status 的配置文件在 /etc/i3status.conf,可以放到指定目录下,然后修改 i3 的配置文件,在 bar {} 后面加上 -c 来指定配置文件,修改之前,记得备份一份

bar {
        status_command i3status -c /home/chenxiaodu/.config/i3/i3status.conf
}

i3blocks 可以看开头的博客里面的介绍,这个是当前的一个效果

i3 颜色方案

管理器颜色方案

  • 官方 i3 配置手册
  • 颜色定义
    • bgcolor 表示背景色
    • in-bgcolor 表示非活动窗口的背景色
    • text 是文本颜色
    • u-bgcolor 表示紧急操作的背景色
    • indicator 是标示下一个窗口位置的线条的颜色
    • in-text 是非活动窗口的文本颜色
  • 类别
    • client.focused 定义了焦点窗口的颜色
    • client.unfocused 定义了失去焦点时窗口的装饰
    • client.focused_inactive 当其中一个容器处于焦点但当前没有焦点时,显示的颜色
    • client.urgent 定义了紧急操作时的颜色
# 窗口的色彩方案
set $col_green   #20b2aa
set $col_gray    #525252
set $col_black   #1e1e23
set $col_purple  #b399ff
set $col_red     #470024
set $col_pink    #ff69b4
set $col_white   #ffffff
#                       边框         背景         文本         指示器(显示下一个窗口位置的线条)
client.focused          $col_green   $col_green   $col_black   $col_purple
client.unfocused        $icol_gray   $col_gray    $col_gray    $col_gray
client.focused_inactive $icol_gray   $col_gray    $col_gray    $col_gray
client.urgent           $col_red     $col_red     $col_black   $col_red

bar 颜色方案

bar {
        # status_command i3blocks -c /home/chenxiaodu/.config/i3/i3blocks.conf
        status_command i3status -c /home/chenxiaodu/.config/i3/i3status.conf
        colors {
                separator  $col_pink
                #                       border        background    text
                focused_workspace       $col_purple   $col_purple   $col_black
                inactive_workspace      $col_black    $col_black    $col_white
                urgent_workspace        $col_red      $col_red      $col_black
        }
}

效果如下

i3gaps

I3-wm 默认窗口之间是没有间隙的,如下图,i3gaps 是一个添加间隙的工具

i3 配置文件增加下面的内容

# default gaps
# 窗口之间的间隙大小(像素值)
gaps inner 10
# 屏幕边缘和窗口之间的间隙大小(像素值)
gaps outer 5
# gaps
set $mode_gaps Gaps: (o)uter, (i)nner, (h)orizontal, (v)ertical, (t)op, (r)ight, (b)ottom, (l)eft
set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_horiz Horizontal Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_verti Vertical Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_top Top Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_right Right Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_bottom Bottom Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_left Left Gaps: +|-|0 (local), Shift + +|-|0 (global)
bindsym $mod+Shift+g mode "$mode_gaps"
mode "$mode_gaps" {
        bindsym o      mode "$mode_gaps_outer"
        bindsym i      mode "$mode_gaps_inner"
        bindsym h      mode "$mode_gaps_horiz"
        bindsym v      mode "$mode_gaps_verti"
        bindsym t      mode "$mode_gaps_top"
        bindsym r      mode "$mode_gaps_right"
        bindsym b      mode "$mode_gaps_bottom"
        bindsym l      mode "$mode_gaps_left"
        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
mode "$mode_gaps_outer" {
        bindsym plus  gaps outer current plus 5
        bindsym minus gaps outer current minus 5
        bindsym 0     gaps outer current set 0
        bindsym Shift+plus  gaps outer all plus 5
        bindsym Shift+minus gaps outer all minus 5
        bindsym Shift+0     gaps outer all set 0
        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
mode "$mode_gaps_inner" {
        bindsym plus  gaps inner current plus 5
        bindsym minus gaps inner current minus 5
        bindsym 0     gaps inner current set 0
        bindsym Shift+plus  gaps inner all plus 5
        bindsym Shift+minus gaps inner all minus 5
        bindsym Shift+0     gaps inner all set 0
        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
mode "$mode_gaps_horiz" {
        bindsym plus  gaps horizontal current plus 5
        bindsym minus gaps horizontal current minus 5
        bindsym 0     gaps horizontal current set 0
        bindsym Shift+plus  gaps horizontal all plus 5
        bindsym Shift+minus gaps horizontal all minus 5
        bindsym Shift+0     gaps horizontal all set 0
        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
mode "$mode_gaps_verti" {
        bindsym plus  gaps vertical current plus 5
        bindsym minus gaps vertical current minus 5
        bindsym 0     gaps vertical current set 0
        bindsym Shift+plus  gaps vertical all plus 5
        bindsym Shift+minus gaps vertical all minus 5
        bindsym Shift+0     gaps vertical all set 0
        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
mode "$mode_gaps_top" {
        bindsym plus  gaps top current plus 5
        bindsym minus gaps top current minus 5
        bindsym 0     gaps top current set 0
        bindsym Shift+plus  gaps top all plus 5
        bindsym Shift+minus gaps top all minus 5
        bindsym Shift+0     gaps top all set 0
        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
mode "$mode_gaps_right" {
        bindsym plus  gaps right current plus 5
        bindsym minus gaps right current minus 5
        bindsym 0     gaps right current set 0
        bindsym Shift+plus  gaps right all plus 5
        bindsym Shift+minus gaps right all minus 5
        bindsym Shift+0     gaps right all set 0
        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
mode "$mode_gaps_bottom" {
        bindsym plus  gaps bottom current plus 5
        bindsym minus gaps bottom current minus 5
        bindsym 0     gaps bottom current set 0
        bindsym Shift+plus  gaps bottom all plus 5
        bindsym Shift+minus gaps bottom all minus 5
        bindsym Shift+0     gaps bottom all set 0
        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
mode "$mode_gaps_left" {
        bindsym plus  gaps left current plus 5
        bindsym minus gaps left current minus 5
        bindsym 0     gaps left current set 0
        bindsym Shift+plus  gaps left all plus 5
        bindsym Shift+minus gaps left all minus 5
        bindsym Shift+0     gaps left all set 0
        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}

配置 i3gaps 之后的效果

xterm 终端

sudo pacman -S xterm

字体安装

sudo pacman -S otf-cascadia-code

xterm 配置文件

配置文件我都是统一放 .config 目录下的

mkdir ~/.config/xterm
vim ~/.config/xterm/.Xresources

xterm

xterm RESOURCES

下面是我的配置文件,实现了

  • 右键黏贴(默认左键选中就是复制)
  • 白底黑字
  • 隐藏滚动条
  • 配置窗口默认尺寸
  • 字体和字体大小
  • 光标颜色
  • 禁止光标闪烁
xterm*vt100.translations: #override \n\
  <Btn3Down>: insert-selection(PRIMARY)
xterm*background: black
xterm*foreground: white
xterm*scrollBar: false
xterm*geometry: 125x45
xterm*faceName: Cascadia Code
xterm*faceSize: 11
xterm*cursorColor: #ff69b4
xterm*cursorBlink: false

electron-ssr

ssr 魔法工具,因为我用的 2024.11.01 这个版本的镜像安装,现在最新的 yay 镜像仓库已经缺失了 libappindicator-sharp 这个工具,导致安装有问题,下面记录了解决方法,对应的包我也上传到 gitee 了,以防以后又没了

# 编译 libappindicator-sharp
git clone https://aur.archlinux.org/libappindicator-sharp.git
sudo pacman -S glib2-devel
yay -S breezy
makepkg -si
# 安装 electron-ssr
yay -S python-launchpadlib
sudo pacman -U package/electron-ssr-0.2.7.pacman

音频管理 pulseaudio

安装工具和依赖

sudo pacman -S pulseaudio-alsa pulseaudio-bluetooth pulseaudio-equalizer pulseaudio-jack alsa-utils playerctl pavucontrol

启动 pulseaudio

systemctl --user enable pulseaudio --now

如果声音轻,或者没声音,可以用 pavucontrol 调出 gui 界面进行调试

微信

https://linux.weixin.qq.com/

官方下载 AppImage 包

sudo pacman -S fuse2
chmod +x WeChatLinux_x86_64.AppImage
# 运行微信
./WeChatLinux_x86_64.AppImage

中文输入法

Localization/Simplified Chinese

中文和 emoji 展示问题

sudo pacman -S noto-fonts noto-fonts-cjk noto-fonts-emoji

更新字体缓存

fc-cache -fv

安装中文输入法

sudo pacman -S fcitx5 fcitx5-gtk fcitx5-qt fcitx5-configtool fcitx5-chinese-addons fcitx5-pinyin-zhwiki

i3 不属于 gui 环境,在 ~/.xprofile 配置下面的内容

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

启动 fcitx5

source ~/.xprofile
fcitx -d

配置输入法

fcitx5-configtool

繁体字改成简体

开启云拼音,改为百度

如果中文输入不行,reboot 一下试试

其他应用

archlinux 简明指南

posted @ 2024-11-20 21:41  月巴左耳东  阅读(37)  评论(0编辑  收藏  举报