第 21.13 节 Linux 兼容层故障排除与配置
Linux 兼容层的声音
目前 Chroot 的 Linux 兼容层内部中没有声音,要想有声音必须在 FreeBSD 中直接运行 Linux 程序,而非 chroot
Ubuntu 兼容层:
直接从 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/tc.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.0)
以下是输出的翻译和表格化:
参数 | 说明 |
---|---|
kern.features.linux64 | 64 位 Linux 支持 |
kern.features.linux | 32 位 Linux 支持 |
kern.features.linuxulator_v4l2 | 在 linux 兼容层中支持 V4L2 ioctl wrapper |
kern.features.linuxulator_v4l | 在 linux 兼容层中支持 V4L ioctl wrapper |
vm.uma.linux_dma_object | |
vm.uma.linux_dma_object.stats | |
vm.uma.linux_dma_object.stats.xdomain | 从错误域调用的空闲调用 |
vm.uma.linux_dma_object.stats.fails | 分配失败的数量 |
vm.uma.linux_dma_object.stats.frees | 总共的空闲调用 |
vm.uma.linux_dma_object.stats.allocs | 总共的分配调用 |
vm.uma.linux_dma_object.stats.current | 当前分配的项目数量 |
vm.uma.linux_dma_object.domain | |
vm.uma.linux_dma_object.domain.0 | |
vm.uma.linux_dma_object.domain.0.timin | 自零以来的长时间最小项目计数时间 |
vm.uma.linux_dma_object.domain.0.limin | 长时间最小项目计数 |
vm.uma.linux_dma_object.domain.0.wss | 工作集大小 |
vm.uma.linux_dma_object.domain.0.bimin | 此批次中的最小项目计数 |
vm.uma.linux_dma_object.domain.0.imin | 此时期的最小项目计数 |
vm.uma.linux_dma_object.domain.0.imax | 此时期的最大项目计数 |
vm.uma.linux_dma_object.domain.0.nitems | 此域中的项目数量 |
vm.uma.linux_dma_object.limit | |
vm.uma.linux_dma_object.limit.bucket_max | 每个域的桶缓存中的最大项目数 |
vm.uma.linux_dma_object.limit.sleeps | 总区限制休眠 |
vm.uma.linux_dma_object.limit.sleepers | 在限制处休眠的线程数 |
vm.uma.linux_dma_object.limit.max_items | 最大分配和缓存项目数 |
vm.uma.linux_dma_object.limit.items | 如果设置了限制,则为当前分配的项目数 |
vm.uma.linux_dma_object.keg | |
vm.uma.linux_dma_object.keg.domain | |
vm.uma.linux_dma_object.keg.domain.0 | |
vm.uma.linux_dma_object.keg.domain.0.free_slabs | 未使用的 slabs |
vm.uma.linux_dma_object.keg.domain.0.free_items | 在 slab 层中的空闲项目 |
vm.uma.linux_dma_object.keg.domain.0.pages | 从 VM 分配的总页数 |
vm.uma.linux_dma_object.keg.efficiency | Slab 利用率(100 - 内部碎片化%) |
vm.uma.linux_dma_object.keg.reserve | 预留项目数量 |
vm.uma.linux_dma_object.keg.align | 项目对齐掩码 |
vm.uma.linux_dma_object.keg.ipers | 每个 slab 可用的项目数 |
vm.uma.linux_dma_object.keg.ppera | 每个 slab 分配的页数 |
vm.uma.linux_dma_object.keg.rsize | 带有对齐的实际对象大小 |
vm.uma.linux_dma_object.keg.name | Keg 名称 |
vm.uma.linux_dma_object.bucket_size_max | 最大允许的每 CPU 缓存大小 |
vm.uma.linux_dma_object.bucket_size | 期望的每 CPU 缓存大小 |
vm.uma.linux_dma_object.flags | 分配器配置标志 |
vm.uma.linux_dma_object.size | 分配大小 |
vm.uma.linux_dma_pctrie | |
vm.uma.linux_dma_pctrie.stats | |
vm.uma.linux_dma_pctrie.stats.xdomain | 从错误域调用的空闲调用 |
vm.uma.linux_dma_pctrie.stats.fails | 分配失败的数量 |
vm.uma.linux_dma_pctrie.stats.frees | 总共的空闲调用 |
vm.uma.linux_dma_pctrie.stats.allocs | 总共的分配调用 |
vm.uma.linux_dma_pctrie.stats.current | 当前分配的项目数量 |
vm.uma.linux_dma_pctrie.domain | |
vm.uma.linux_dma_pctrie.domain.0 | |
vm.uma.linux_dma_pctrie.domain.0.timin | 自零以来的长时间最小项目计数时间 |
vm.uma.linux_dma_pctrie.domain.0.limin | 长时间最小项目计数 |
vm.uma.linux_dma_pctrie.domain.0.wss | 工作集大小 |
vm.uma.linux_dma_pctrie.domain.0.bimin | 此批次中的最小项目计数 |
vm.uma.linux_dma_pctrie.domain.0.imin | 此时期的最小项目计数 |
vm.uma.linux_dma_pctrie.domain.0.imax | 此时期的最大项目计数 |
vm.uma.linux_dma_pctrie.domain.0.nitems | 此域中的项目数量 |
vm.uma.linux_dma_pctrie.limit | |
vm.uma.linux_dma_pctrie.limit.bucket_max | 每个域的桶缓存中的最大项目数 |
vm.uma.linux_dma_pctrie.limit.sleeps | 总区限制休眠 |
vm.uma.linux_dma_pctrie.limit.sleepers | 在限制处休眠的线程数 |
vm.uma.linux_dma_pctrie.limit.max_items | 最大分配和缓存项目数 |
vm.uma.linux_dma_pctrie.limit.items | 如果设置了限制,则为当前分配的项目数 |
vm.uma.linux_dma_pctrie.keg | |
vm.uma.linux_dma_pctrie.keg.domain | |
vm.uma.linux_dma_pctrie.keg.domain.0 | |
vm.uma.linux_dma_pctrie.keg.domain.0.free_slabs | 未使用的 slabs |
vm.uma.linux_dma_pctrie.keg.domain.0.free_items | 在 slab 层中的空闲项目 |
vm.uma.linux_dma_pctrie.keg.domain.0.pages | 从 VM 分配的总页数 |
vm.uma.linux_dma_pctrie.keg.efficiency | Slab 利用率(100 - 内部碎片化%) |
vm.uma.linux_dma_pctrie.keg.reserve | 预留项目数量 |
vm.uma.linux_dma_pctrie.keg.align | 项目对齐掩码 |
vm.uma.linux_dma_pctrie.keg.ipers | 每个 slab 可用的项目数 |
vm.uma.linux_dma_pctrie.keg.ppera | 每个 slab 分配的页数 |
vm.uma.linux_dma_pctrie.keg.rsize | 带有对齐的实际对象大小 |
vm.uma.linux_dma_pctrie.keg.name | Keg 名称 |
vm.uma.linux_dma_pctrie.bucket_size_max | 最大允许的每 CPU 缓存大小 |
vm.uma.linux_dma_pctrie.bucket_size | 期望的每 CPU 缓存大小 |
vm.uma.linux_dma_pctrie.flags | 分配器配置标志 |
vm.uma.linux_dma_pctrie.size | 分配大小 |
vfs.nfsd.linux42server | 启用 Linux 风格 NFSv4.2 服务器(非 RFC 兼容) |
vfs.nfsd.flexlinuxhack | 对于 Linux 客户端,绕过 Flex File Layout 错误 |
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 内核版本 |
security.jail.param.linux.osname | Jail Linux 内核 OS 名称 |
security.jail.param.linux. | Jail Linux 参数 |
compat.linux32 | 32 位 Linux 兼容层 |
compat.linux32.emulate_i386 | 兼容真实的 i386 |
compat.linux32.maxvmem | |
compat.linux32.maxssiz | |
compat.linux32.maxdsiz | |
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 内核版本 |
compat.linux.osname | Linux 内核 OS 名称 |
compat.linux.setid_allowed | 允许在执行 Linux 二进制文件时设置 setuid/setgid |
compat.linux.map_sched_prio | 将调度程序优先级映射到 Linux 优先级(不符合 POSIX 标准) |
compat.linux.preserve_vstatus | 保留 VSTATUS termios(4) 参数 |
compat.linux.ignore_ip_recverr | 忽略启用 IP_RECVERR |
compat.linux.dummy_rlimits | 返回不支持的 Linux 特定 rlimits 的虚拟值 |
compat.linux.default_stacksize | 默认软堆栈大小资源限制,或-1 表示无限制 |
compat.linux.default_openfiles | 默认软打开文件资源限制,或-1 表示无限制 |
compat.linux.debug | 记录来自 linux(4) 的警告;或 0 以禁用 |
compat.linuxkpi | LinuxKPI 参数 |
compat.linuxkpi.skb | LinuxKPI skbuff |
compat.linuxkpi.skb.mem_limit | SKB 内存限制:0=无限制,1=32 位,2=36 位,其他=未定义(目前为 32 位) |
compat.linuxkpi.lkpi_pci_nseg1_fail | 单段 busdma 映射失败次数 |
compat.linuxkpi.task_struct_reserve | 保留用于不可休眠分配的 struct task 和 struct mm 的数量 |
compat.linuxkpi.net_ratelimit | 限制每秒发送的 LinuxKPI net 消息的数量 |
compat.linuxkpi.warn_dump_stack | 设置以启用 WARN_ON() 的堆栈跟踪。清除以禁用。 |
compat.linuxkpi.debug | 设置以启用 pr_debug() 打印。清除以禁用。 |
最后更新于