Skip to content

Latest commit

 

History

History
503 lines (342 loc) · 18.4 KB

arch-tricks.md

File metadata and controls

503 lines (342 loc) · 18.4 KB
tags title
Blog/System Configurations
初装Arch Linux后的软件和设置建议

在前文在虚拟机/物理机中安装 Arch Linux中,俺已经描述了如何在笔记本上安装运行 KDE 桌面环境的 Arch Linux 系统。在满足了基本的 Google 搜索需求后,还有很多可以提升使用体验的空间。

本文是接续前文的 Linux 自用安装记录后篇,旨在记录俺完善自己的 Linux 系统使用体验的过程中,安装并使用了哪些工具、修改了哪些配置。作为备忘之用。

欢迎各位分享自己的技巧和建议!

bash-completion

bash-completion包提供bash中各种命令的补全,包括git命令中补全分支名称、pacman命令中补全包名称等,十分便利。

sudo pacman -S bash-completion

Readline

Readline是用于 bash 等 CLI 的编辑、输入库,对其进行设置可以让 CLI 交互变得更方便:

Readline 中按上下箭头默认会在历史输入中选择,修改inputrc可以使其只匹配当前已输入内容进行搜索:

vi ~/.inputrc
"\e[A": history-search-backward
"\e[B": history-search-forward
# ctrl+d

删除光标前的内容:ctrl+u

删除光标后的内容:ctrl+k

援引前一条命令的内容用!!,如sudo !!来用root权限执行前一条命令。

pacman 技巧

sudo pacman -Syu
sudo pacman -S pacman-contrib
sudo systemctl enable paccache.timer

列出所有非依赖的包

以下命令计算所有安装的包中不被任何包显式依赖的包,可以用来在重装时参考最少需要安装哪些包,建议写成脚本放在/home/lstpkg.sh以供随时运行:

installed_groups="base-devel xfce4 xfce4-goodies"
echo Native:
(comm -23 <(pacman -Qnqtt) <(pacman -Qgq $installed_groups | sort); printf %"s\n" $installed_groups) | sort
echo
echo Foreign:
pacman -Qm

其中comm比较两个文件,左边列出第一个文件独有的内容,中间列出第二个文件独有的内容,右边列出两个文件共有的内容。可用-配合12或/和3来隐藏对应列的输出。此处-23即只列出第一个文件中独有的内容。

<()运算符表示将括号内的表达式的输出当作输入命令中所需要的一个文件。

installed_groups应该填写我们手动安装的软件包组

Arch Linux CN

Arch Linux CN 的主页群组Telegram

进了里面去个个都是人才,说话又好听,哎哟超喜欢在里面!百万大佬,在线聊骚(指年薪、迫真),还不快快行动起来!

咳咳,这里主要讲一下用 ArchLinuxCN 源有什么用,以及如何使用。之前在使用 powerpill 缓存软件包的环节已经讲过了一些。但是与/etc/pacman.d/mirrorlist不同的是,pacstrap不会自动拷贝/etc/pacman.conf。不过无妨,反正我们还要添加archlinuxcn-mirrolist,这里正好重新讲一遍。

ArchLinuxCN 源是国内 ArchLinux 爱好者自行打包并维护的软件源,ArchLinux 官网可考。内有powerpillyayaria2-fastfcitx5等许多 AUR 包的编译打包版。社群里有 ArchLinux 的开发者、TU、fcitx5的开发者等。知名度和可信度很高,大家也可以去混个脸熟,问些好问题之类的。

添加 ArchLinuxCN 源

sudo -e /etc/pacman.conf
# 文件尾部追加:
[archlinuxcn]
Server = https://repo.archlinuxcn.org/$arch

导入 GPG key,由 ArchLinux Trusted User farseerfc签名,故依赖 ArchLinux 自带的archlinux-keyring即可安装:

sudo pacman -Sy archlinuxcn-keyring

安装archlinuxcn-mirrorlist-git包以获得镜像列表,并在/etc/pacman.conf引用:

sudo pacman -S archlinuxcn-mirrorlist-git
sudo -e /etc/pacman.d/archlinuxcn-mirrorlist
# 去掉想要的镜像服务器前的注释

sudo -e /etc/pacman.conf
# 修改之前添加的内容为:
[archlinuxcn]
Include = /etc/pacman.d/archlinuxcn-mirrorlist

之后便可享受 ArchLinuxCN 源的便利了。

Git 与 AUR 与 pacman wrapper

有两类软件可以作为 pacman 的封装,一类如yay可以作为AUR软件的安装管理助手,另一类如powerpill可以多线程、rsync差量下载。

yaypowerpill均为非 Arch 官方的 AUR 软件包。我们可以从 ArchLinuxCN 源按照通常方法直接安装,也可以从 AUR 编译安装。如不使用 Go 语言,可不必自己编译yay,用yay-bin即可。直接安装不再赘述,这里先介绍 AUR 软件的手动安装,然后介绍用yay安装 AUR 软件,最后调优powerpill

安装 AUR 软件包之前需要先用 Git 下载。所以先配置好 Git,即方便 AUR 软件安装,也方便日后开发流程。

Git

安装并配置Git

YourUsernameyour@email.com替换为您的名字和邮箱地址。此信息之后将被用于的 commit message 中,作为开发历史的资料和 GitHub 等托管网站连接 commit 与账户的依据。

将代理服务器的地址设置为之前开启的 Shadowsocks 本地端的地址。Git for Windows 下使用socks5协议貌似会不被ServicePointManager支持而需要反复输入账户密码,建议用http协议。而 Linux 下似乎又不能 clone gist Linux 下将代理协议成 socks5h 即可解析 gist 等 DNS 污染的域名。

sudo pacman -S git
git config --global user.name escape0707
git config --global user.email tothesong@gmail.com
git config --global http.proxy socks5h://127.0.0.1:7890
git config --global credential.helper /usr/lib/git-core/git-credential-libsecret
git config --global merge.ff only
git config --global pull.ff only

配置credential.helper后在和远程服务器同步时不需要反复输入用户名和密码。~~俺为了方便设置为store来明文保存到本地,但为了安全也可以选择cache。~~建议安装libsecretgnome-keyring并用上述方法安全的启用credential.helper。Git for Windows 用户貌似系统级默认git config --system credential.helper manager?没有的话自己设置到--global就好了。

Yay

通过手动安装 AUR 软件包的方式安装yay-bin,首先需要安装base-devel软件包组:

sudo pacman -S base-devel --needed

--needed来跳过已安装软件包的重新安装。

之后 clone yay 的 build 文件:

git clone https://aur.archlinux.org/yay-bin.git
cd yay-bin
less PKGBUILD

检查 PKGBUILD 文件无误后生成软件包并安装:

makepkg -si

Powerpill

之后我们可以像用pacman一样使用yay来更新或安装官方包和 AUR 包,例如 CN 源的不限单服务器连接数的aria2-fastpowerpill。但是不要和sudo一起用,yay会在需要时自行申请提权:

yay -S aria2-fast powerpill

/etc/pacman.conf的默认SigLevel改为PackageRequired,参见Wiki#Troubleshooting

此后即可使用powerpill,调优参考powerpill.json(1)手册页:

sudo -e /etc/powerpill/powerpill.json

主要需要调整其中aria2参数部分(如果安装的原版aria2、单服务器最大连接数必须小于等于16):

"--max-concurrent-downloads=100",
"--max-connection-per-server=32",
"--min-split-size=1M",

将 CapsLock 映射到 Esc 和 Ctrl

当使用 Vi 时,为了不用经常去够EscCtrl,Linux 下可以使用caps2esc,Windows 下可以使用dual-key-remap或者AutoHotKey 脚本

yay caps2esc
sudo systemctl enable caps2esc --now

配置 Swap

Swap即虚拟内存,在物理内存占用高时起作用。

之前分配了固定的 Swap 分区可以跳过这一部分。

如果没有,在此可以设置Swap 文件

sudo pacman -S systemd-swap
sudo -e /etc/systemd/swap.conf

设置swapfc_enabled=1,可用/+搜索字串+回车定位。也可用sed替换:

sudo sed --in-place s/swapfc_enabled=0/swapfc_enabled=1/ /etc/systemd/swap.conf

其中--in-place表示直接修改指定文件并保存。

俺的物理内存为 4G,不使用休眠模式则设置swapfc_chunk_size=2G

之后启用服务:

sudo systemctl enable systemd-swap

安装蓝牙驱动并启用

俺的笔电采用高通无线/蓝牙芯片,需要自行安装蓝牙驱动

检查日志找到所需的蓝牙驱动型号:

dmesg | grep -i bluetooth

找到类似以下的内容:

bluetooth hci0: Direct firmware load for brcm/BCM43142A0-105b-e065.hcd failed with error -2

如果命令的结果不是BCM43142A0-105b-e065.hcd,在下一步请根据您看到的名称下载并应用驱动。

下载并应用:

curl -O https://github.com/winterheart/broadcom-bt-firmware/raw/master/brcm/BCM43142A0-105b-e065.hcd
sudo mv BCM43142A0-105b-e065.hcd /lib/firmware/brcm/

重新载入并检查是否正常:

sudo modprobe -r btusb
sudo modprobe btusb
dmesg | grep -i bluetooth

启用蓝牙

sudo systemctl enable bluetooth

如果在重启后蓝牙功能不自动打开,参考蓝牙#启动后自动开启

输入法

Linux 下有许多中文输入法,俺使用包含于 CN 源中的Fcitx5

安装 fcitx5、GTK/Qt4/Qt5 库、中文插件包:

sudo pacman -S fcitx5-git fcitx5-gtk-git fcitx5-qt4-git fcitx5-qt5-git fcitx5-chinese-addons-git

为了 GTK/Qt 程序能使用输入法,设置环境变量:

cat >> ~/.pam_environment
GTK_IM_MODULE=fcitx5
QT_IM_MODULE=fcitx5
XMODIFIERS=@im=fcitx5

启动 fcitx5:

fcitx5

截止至 2019/11/23,fcitx5 还没有 KDE 以外的桌面环境的 GUI 配置插件。但是各种桌面环境都可以用通过安装plasma-workspace来用上 KDE 专属的配置插件(反正之后可以删掉):

sudo pacman -S plasma-workspace kcm-fcitx5-git

在 fcitx5 启动的情况下,从开始菜单启动Fcitx 5 Configuration,或用kcmshell5启动配置插件:

kcmshell5 kcm_fcitx5

在配置插件中,取消勾选“仅显示当前语言”并启用需要的输入法如pinyinshuangpin;开启云拼音插件,如果网络受限选择百度云拼音,或用proxychains-ng代理 fcitx5;设置候选词数量、皮肤、模糊音等。具体设置俺会另外上传一个 Git Repo,其中会有配置文件历史。//Todo

配置插件删除快捷键时,不知为何一定会留下至少一个。想要彻底删除,只好手动去~.config/fcitx5/中将对应配置文件中的键值的0=XXXXXXX改为0=

最后,在自己桌面环境的自启动项里手动添加 fcitx5 即可。

GoldenDict

俺使用的离线词典软件 GoldenDict 的 CN 源 git 版:

sudo pacman -S goldendict-qt5-git

此版本会同时安装官方版缺少的 Morphology 和拼写检查:hunspell

Linux 上 GoldenDict 可以使用 Scan Popup 直接划词翻译,但是使用起来有时不如 Windows 上用AutoHotKey 脚本实现的稳定。

Visual Studio Code

俺安装的是开源编译版 VSCode:

sudo pacman -S code

当使用 C/C++插件排版文件时,可能会提示无法找到libtinfo.so.5,这是因为 Arch Linux 自带的是libtinfo.so.6,而 C/C++插件自带的clang-format版本过旧仍在使用libtinfo.so.5。在插件开发团队有时间整合新版clang-format之前,我们可以安装新版clang并设置让插件使用新版clang-format

sudo pacman -S clang

之后在 VSCode 设置中加入:

"C_Cpp.clang_format_path": "/usr/bin/clang-format"

Proxychains

让单个命令运行在代理环境下:

sudo pacma -S proxychains-ng
# 修改/etc/proxychains.conf最后一行,替换127.0.0.1为本机本地地址,1080为本地代理的端口号:
sudo sed -i "$d" /etc/proxychains.conf
echo "socks5 127.0.0.1 1080" | sudo tee -a/etc/proxychains.conf

之后便可用其代理命令行工具了, 这里以curl为例测试一下:

proxychains curl ifconfig.me/ip
curl ifconfig.me/ip

通过返回的 ip 即可判断是否成功代理。

Privoxy

socks5 代理变 http 代理:

sudo pacman -S privoxy
sudo -e /etc/privoxy/config
# 结尾追加,替换1080为本地代理的端口号:
forward-socks5 / localhost:1080 .

启动服务:

sudo systemctl enable privoxy --now

之后便可用http://localhost:8118为 http 代理了。

结语 // Todo

此三篇文章便是俺初装 Arch Linux 的记录。小总结:

安装所有包:

pacstrap /mnt arch-wiki-docs base base-devel bash-completion broadcom-wl-dkms caps2esc code cppreference dolphin-plugins fcitx-im fcitx-cloudpinyin firefox git goldendict intel-ucode kcm-fcitx kdegraphics-meta kdeutils-meta khelpcenter konsole kwrite linux-headers man-db neovim noto-fonts-cjk openssh pacman-contrib plasma-meta plasma-wayland-session powerpill reflector shadowsocks-libev systemd-swap telegram-desktop ttf-dejavu v2ray xf86-video-intel xf86-video-nouveau yay-bin

chroot 后创建用户账户,设置两个账户的密码,设置sudoers

EDITOR=vi visudo

启用所有服务:

systemctl enable bluetooth NetworkManager pacache.timer sddm systemd-swap

设置 Swap:

vi /etc/systemd/swap.conf

最后用efibootmgr制作好启动项就可以启动了。

Fine-tune makepkg

/etc/makepkg.conf

CFLAGS="-march=native -O2 -pipe -fstack-protector-strong -fno-plt" CXXFLAGS="${CFLAGS}" MAKEFLAGS="-j4" COMPRESSXZ=(xz -c -z - --threads=0)

DLAGENTS for curl proxy, e.g.:

'https::/usr/bin/curl --socks5 127.0.0.1:1080 -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'

zeal & dash & devdocs

xdg-user-dirs-gtk-update

Xfce4 快捷键设置

想实现类似 Windows 的 Win+1、2、3 的软件启动和切换,似乎jumpapp-git是最合适的:

yay jumpapp-git

之后设置快捷键例如,Super+1=jumpapp firefoxSuper+2=jumpapp code等。

为了能够同时使用Super键打开whiskermenu,根据Manjaro 论坛建议,可以设置Alt+F1=xfce4-popup-whiskermenu,之后安装xcape

sudo pacman -S xcape

并且设置自启动项xcape -e 'Super_L=Alt_L|F1;Super_R=Alt_L|F1'

Xfce4 最大化启动 Terminal

参考这个回答

mkdir -p ~/.local/share/applications
sed "s/Exec=xfce4-terminal/Exec=xfce4-terminal --maximize" /usr/share/applications/xfce4-terminal.desktop > ~/.local/share/applications/xfce4-terminal.desktop

之后从开始菜单启动 Xfce Terminal 即为最大化。但通过exo-open启动的,即默认终端还不是。所以我们要在开始菜单中Preferred Applications里,给默认终端新加一个,内容还是“xfce4-terminal`。然后去改生成的文件:

vi ~/.local/share/xfce4/helpers/custom-TerminalEmulator.desktop
# 修改对应的两行,加上--maximize
X-XFCE-CommandsWithParameter=/usr/bin/xfce4-terminal --maximize "%s"
X-XFCE-Commands=/usr/bin/xfce4-terminal --maximize

手机 USB 热点

使用手机热点比 Windows 上还要方便,如果 Wi-Fi 自不必说,即便是最优选择 USB,Android 2.2 以上无需驱动即可连接;iPhone 也只需要安装一个仅370KBlibimobiledevice驱动包即可:

sudo pacman -S libimobiledevice

打开 Magic SysRq 组合键

魔键的详细叙述

具体命令(如果需要用到更多更狠的组合键可以查以上网页中的表,或者echo 1):

echo 64 | sudo tee /proc/sys/kernel/sysrq