11.12 故障排除与未竟事宜
本节汇总 Linux 兼容层常见问题及解决方法。
11.12.1 Linux 兼容层的声音
chroot 进入的 Linux 兼容层内部如果没有声音输出,通常需要在 FreeBSD 中直接运行 Linux 程序,而非使用 chroot。
Ubuntu 兼容层:
编辑 /compat/ubuntu/etc/asound.conf 文件,写入以下两行,请注意区分英文感叹号 ! 与数字 1。
pcm.!sysdefault pcm.plug:oss
pcm.!default pcm.sysdefault11.12.2 在 FreeBSD 的命令行运行软件(基于 Ubuntu 兼容层)
直接从 FreeBSD 命令行运行软件而无需 chroot 的方法:
方式一
# sysctl compat.linux.emul_path=/compat/ubuntu # 立即生效
# echo compat.linux.emul_path=/compat/ubuntu >> /etc/sysctl.conf # 永久化设置方式二
# mv /compat/ubuntu/lib64/ld-linux-x86-64.so.2 /compat/ubuntu/lib64/ld-linux-x86-64.so.2.back
# ln -s /compat/ubuntu/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /compat/ubuntu/lib64/ld-linux-x86-64.so.2无需 chroot,可直接在终端运行 Linux 程序(仅部分程序),需指定绝对路径。
Arch 和 openSUSE 兼容层只需要方式一,无需方式二。
11.12.2.1 参考文献
- Micski D K. FREEBSD, SYSTEM ADMINISTRATION Install Ubuntu base system into FreeBSD’s Linux Binary Compatibility[EB/OL]. (2021-12-21)[2026-03-25]. https://www.micski.dk/2021/12/21/install-ubuntu-base-system-into-freebsds-linux-binary-compatibility/. 该文章详细介绍在 FreeBSD 上构建 Ubuntu 兼容层的完整技术流程,为本章节实践提供重要参考。
11.12.3 以普通用户权限运行 QQ
兼容层的用户与 FreeBSD 用户存在 UID 映射关系。
假设在 FreeBSD 的普通用户名是 ykla,UID 是 1001(正常情况下默认为 1001):
# useradd --uid 1001 --gid 0 -m ykla # 此步骤在兼容层里操作!警告
在 Arch 中创建用户 ykla 后,此用户无法用于 yay 安装软件,仍然需要使用 Shell 脚本默认创建的 test 用户。
11.12.4 从图标启动程序
- 编辑
QQ.desktop文件,写入以下内容(以 Ubuntu 兼容层为例):
[Desktop Entry]
Name=QQ
Exec=/compat/ubuntu/opt/QQ/qq --no-sandbox --in-process-gpu %U
Terminal=false
Type=Application
Icon=/compat/ubuntu/usr/share/icons/hicolor/512x512/apps/qq.png
StartupWMClass=QQ
Categories=Network;
Comment=QQ
MimeType=x-scheme-handler/tencent;- 编辑
Chrome.desktop文件,写入以下内容(以 Ubuntu 兼容层为例):
[Desktop Entry]
Version=1.0
Type=Application
Name=Chrome
Comment=
Exec=/compat/ubuntu/opt/google/chrome/chrome --no-sandbox --in-process-gpu
Icon=/compat/ubuntu/opt/google/chrome/product_logo_256.png
Path=
Terminal=false
StartupNotify=false授予上述文件可执行权限后,文件将显示为正常的图标样式,点击即可启动对应软件。
11.12.5 运行 Chrome(以 Ubuntu 兼容层为例)
下载 Chrome:
# wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb # 无需代理软件,可以直连。此时已经位于 Ubuntu 兼容层了。安装 Chrome:
# apt install ./google-chrome-stable_current_amd64.deb # 此时已经位于 Ubuntu 兼容层了。启动 Chrome:
# /usr/bin/google-chrome-stable --no-sandbox --no-zygote --in-process-gpu # 此时已经位于 Ubuntu 兼容层了。11.12.6 代理软件(以 Clash for Windows 为例)
Linux 兼容层中的代理软件可为 FreeBSD 提供网络代理,因此可直接在兼容层安装 Clash for Windows,按常规方式安装配置即可。
11.12.7 Linux 兼容层网络(Linux QQ 无网络)
本机同时有以太网卡 em0 和无线网卡 wlan0,但实际使用 wlan0 时,Linux 兼容层可能无法正常联网。FreeBSD 的 em0 对应兼容层的 eth0,wlan0 对应 eth1,依此类推。Linux 兼容层无法自动检测哪个接口有网络,且默认使用 eth0。
使用 wlan0 而未使用 em0 时,需要为 em0 分配一个未使用的 IP:
- 临时设置(重启失效):
# ifconfig em0 192.168.11.1 - 永久性设置:即在 FreeBSD /etc/rc.conf 文件中加入(不影响该网卡正常使用):
# ifconfig_em0_alias0="inet 192.168.11.1 netmask 255.255.255.0"以上 192.168.11.1 为未使用的 IP,可自行设置为其他值。
11.12.8 中文输入法
将 /home 路径下的 .profile 文件放到兼容层的 / 目录下:
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
export XMODIFIERS='@im=fcitx'
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx如果遇到类似“sh: warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8)”的错误,以 openSUSE 为例,安装 glibc-lang 和 glibc-locale 这两个包,退出兼容层后重新进入即可。其他系统可搜索相似的包,例如 CentOS 兼容层,应该安装 glibc-locale-source、glibc-langpack-zh。
11.12.9 sysctl 变量
# sysctl -a -d | grep -E "linux|compat.linux"可以列出常用变量。
11.12.10 使用命令行下载软件时报错 403 Forbidden
国内某些镜像站可能出于流量限制等原因,只允许通过指定包管理器获取软件包。使用其他方式拉取时会报错“403 Forbidden”(禁止访问)。
这通常是通过限制包管理器的 UA(User-Agent)实现的。在此情况下,最简便的方法是更换无限制的镜像站,如 TUNA/USTC Mirror。
11.12.11 systemd 与 Wine
systemd 不可用,但可使用 service xxx start 命令替代。
此外,曾尝试使用 https://github.com/zq1997/deepin-wine 源以安装 deepin-qq、deepin-wechat 等软件,但均提示“段错误”。所有 Wine 程序均无法正常运行。如果读者能解决这个问题,请提出 issue 或者 PR。