第 21.13 节 Linux 兼容层故障排除与未竟事宜
Linux 兼容层的声音
目前 Chroot 的 Linux 兼容层内部中没有声音,要想有声音必须在 FreeBSD 中直接运行 Linux 程序,而非 chroot
Ubuntu 兼容层:
编辑 /compat/ubuntu/etc/asound.conf
,写入以下两行,注意那是英文感叹号 !
不是数字 1
。
直接从 FreeBSD 的命令行运行软件(基于 Ubuntu 兼容层)
直接从 FreeBSD 的命令行运行软件而不需要 chroot 的方法:
①
②
然后就不需要 choot 可以直接在终端运行 Linux 的程序了(只是部分)需要指定绝对路径。
Arch 和 OpenSUSE 兼容层只需要 ①,无需 ②
参考文献
以普通用户权限运行 QQ
兼容层的用户与 FreeBSD 用户存在 uid 映射关系。
假设你在 FreeBSD 的普通用户名是 ykla,uid 是 1001(正常情况下默认为 1001):
警告
在 Arch 中创建用户 ykla 后,此用户无法用于 yay 安装软件,仍然需要使用 shell 脚本默认创建的 test 用户。
设置图标双击启动程序
QQ.desktop 内容(以 Ubuntu 兼容层为例):
Chrome.desktop 内容(以 Ubuntu 兼容层为例):
运行 Chrome(以 Ubuntu 兼容层为例)
代理软件(以 clash for windows 为例)
Linux 兼容层的代理软件同时会影响 FreeBSD 的网络状态,因此直接在兼容层安装 clash for windows,设置代理的话 FreeBSD 一样可以使用代理访问网站。正常安装配置即可
Linux 兼容层网络(Linux QQ 没有网络)
如果本机有以太网卡 em0,和无线网卡 wlan0。但是使用的是 wlan0 的网络,则 Linux 兼容层可能会出现没有网络的情况。因为 FreeBSD 的 em0 对应兼容层的 eth0,wlan0 对应 eth1,以此类推。但是 Linux 兼容层不能自动识别哪个有网,且默认使用 eh0。
所以,如果以太网 em0 没用,用的 wlan0,这时候要给不用的以太网卡 em0 随便指定一个不用的 ip:
临时设置 (重启生效):
# ifconfig em0 192.168.11.1
永久性设置:即在 FreeBSD
/etc/rc.conf
中加入(不影响该网卡正常使用):
以上 192.168.11.1
为未分配的假 IP,你可以随便自己设置成别的。
中文输入
将 /home
下的 .profile
放到兼容层的 /
目录下:
如果遇到类似 sh: warning: setlocale: LC_ALL: cannot change locale (zh_CN.uTF-8) 这样的错误。以 OpenSUSE 为例,安装 glibc-lang
和 glibc-locale
这两个包,退出兼容层以后重新进入即可。其他系统可以搜索相似的包,例如 CentOS 兼容层,应该安装 glibc-locale-source
、glibc-langpack-zh
。
sysctl 变量(基于 FreeBSD 14.1)
列出一些常用的:
kern.features.linux64
支持 64 位 Linux
kern.features.linux
支持 32 位 Linux
kern.features.linuxulator_v4l2
在 Linux 兼容层中支持 V4L2 ioctl 包装器
kern.features.linuxulator_v4l
在 Linux 兼容层中支持 V4L ioctl 包装器
vfs.nfsd.flexlinuxhack
对于 Linux 客户端,绕过 Flex 文件布局错误
net.netlink.debug.nl_linux_debug_level
调试级别
hw.snd.compat_linux_mmap
Linux mmap 兼容性(-1 = 强制禁用;0 = 自动;1 = 强制启用)
security.jail.param.linux
Jail Linux 参数
security.jail.param.linux.oss_version
Jail Linux OSS 版本
security.jail.param.linux.osrelease
Jail Linux 内核 OS 版本
security.jail.param.linux.osname
Jail Linux 内核 OS 名称
compat.linux32
32 位 Linux 仿真
compat.linux32.emulate_i386
仿真真实的 i386
compat.linux
Linux 仿真
compat.linux.use_real_ifnames
使用 FreeBSD 接口名称而不是生成 ethN
别名
compat.linux.emul_path
Linux 运行时环境路径
compat.linux.oss_version
Linux OSS 版本
compat.linux.osrelease
Linux 内核 OS 版本
compat.linux.osname
Linux 内核 OS 名称
compat.linux.setid_allowed
允许在 Linux 二进制文件的 execve 上设置 setuid/setgid
compat.linux.map_sched_prio
将调度优先级映射到 Linux 优先级(不符合 POSIX)
compat.linux.preserve_vstatus
保留 VSTATUS termios(4) 标志
compat.linux.default_stacksize
默认软堆栈大小资源限制,或 -1 表示无限制
compat.linux.default_openfiles
默认软打开文件资源限制,或 -1 表示无限制
compat.linux.debug
记录来自 linux(4) 的警告;或 0 表示禁用
最后更新于