文章

专治各种疑难杂症

解决 Linux 下遇到的各种小问题

Arch Linux 中的 emoji 显示问题

刚刚安装好 Arch Linux 后发现很多emoji都显示乱码。

安装 emoji 字体

1
sudo pacman -S noto-fonts-emoji

字体配置

/etd/fonts 目录下新建文件 local.conf,写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
 <alias>
   <family>sans-serif</family>
   <prefer>
     <family>Noto Sans</family>
     <family>Noto Color Emoji</family>
     <family>Noto Emoji</family>
     <family>DejaVu Sans</family>
   </prefer> 
 </alias>
 
 <alias>
   <family>serif</family>
   <prefer>
     <family>Noto Serif</family>
     <family>Noto Color Emoji</family>
     <family>Noto Emoji</family>
     <family>DejaVu Serif</family>
   </prefer>
 </alias>
 
 <alias>
  <family>monospace</family>
  <prefer>
    <family>Noto Mono</family>
    <family>Noto Color Emoji</family>
    <family>Noto Emoji</family>
    <family>DejaVu Sans Mono</family>
   </prefer>
 </alias>
</fontconfig>

也可以在其中 monospace 的配置板块针对系统全局的 monospace 字体进行配置。执行 fc-match monospace 查看系统的 monospace 字体链接到哪个字体。

更新字体缓存

执行 fc-cache -fv 以更新字体缓存。

Arch Linux 安装 yay 包管理器

由于国内的网络环境无法使用克隆编译的方法安装 yay 包管理器。

编辑 pacman 配置文件

sudo vim /etc/pacman.conf 编辑包管理器配置文件,在文件末尾添加以下内容:

1
2
3
[archlinuxcn]
SigLevel = Optional TrustAll
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch

上例中添加了清华镜像源,也可以自行更改其他镜像源。

安装 yay

执行 sudo pacman -S yay 安装 yay 包管理器。

Pyright 无法导入引用的解决办法

在 neovim 使用 pyright 的时候会出现 Pyright: Import "xxx" could not be resolved 的报错。

解决方法参考此 issue,在项目根目录中新建 pyrightconfig.json 文件新增以下内容:

1
2
3
4
5
6
{
    "include": [
         "core",
         "api"
    ]
}

其中 coreapi 是需要导入的文件或者文件夹。

gradle 中增加键盘输入支持

gradle 默认不支持接收键盘输入,解决方法在这里

  • build.gradle (Groovy syntax) 中添加
1
2
3
run {
    standardInput = System.in
}
  • 或在 build.gradle.kts (Kotlin DSL syntax) 中添加
1
2
3
tasks.named<JavaExec>("run") {
    standardInput = System.`in`
}

SDKMAN 对 fish shell 的兼容问题

使用 sdk 安装 java 后,在 fish shell 里仍然无法识别 java 版本。解决方法在这里

~/.config/fish/config.fish 中添加:

function sdk
    bash -c "source '$HOME/.sdkman/bin/sdkman-init.sh'; sdk $argv[1..]"
end

然后将安装的 java 版本添加到 PATH

1
fish_add_path (find ~/.sdkman/candidates/*/current/bin -maxdepth 0)

Arch Linux 开机自动启动蓝牙

每次开机发现蓝牙都默认关闭。使用 rfkill list 发现 bluetooth 被 software blocked 了。

解决方法:

1
sudo nvim /etc/systemd/system/bluetooth-unblock.service

添加以下内容:

1
2
3
4
5
6
7
8
9
[Unit]
Description=Unblock Bluetooth

[Service]
Type=oneshot
ExecStart=/usr/bin/rfkill unblock bluetooth

[Install]
WantedBy=multi-user.target

其中,ExecStart 中的 rfkill 位置使用 which rfkill 命令查看。

然后启动服务

1
sudo systemctl enable bluetooth-unblock.service

Docker 无权访问 docker.socket

使用 systemctl start docker 后执行 docker 相关命令报错:

1
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.46/images/create?fromImage=nginx&tag=latest": dial unix /var/run/docker.sock: connect: permission denied

这个错误表明我们没有足够的权限来访问 Docker 守护进程的 socket 文件,原因是当前的用户不在docker用户组中。将当前用户添加到用户组:

1
sudo usermod -aG docker $USER

然后重新登录当前用户。

本文由作者按照 CC BY 4.0 进行授权