Sway环境状态栏优化
在 sway配置 中完成对桌面空间极致利用之后,按照Gemini建议,定制一个针对 FreeBSD Sway桌面 优化的状态栏:
脚本直接利用FreeBSD的系统工具(
sysctl和date)来获取信息,无需第三方工具,响应最快考虑到我使用的 ThinkPad X220笔记本 硬件很弱,直接通过
sysctl获取内核信息能够降低负载,并适当延长采样周期(5秒)
状态脚本
配置 FreeBSD 专用脚本:
~/.config/sway/status.sh#!/bin/sh
# 1. CPU 状态:频率/温度/负载 (C:频率@温度/负载)
get_cpu() {
# 获取当前频率 (MHz)
freq=$(sysctl -n dev.cpu.0.freq)
temp=$(sysctl -n dev.cpu.0.temperature | cut -d'.' -f1)
load=$(uptime | awk -F'load averages:' '{ print $2 }' | cut -d',' -f1 | tr -d ' ')
echo "C:${freq}@${temp}°C/${load}"
}
# 2. 内存占用 (M:百分比)
get_mem() {
pagesize=$(sysctl -n hw.pagesize)
total_pages=$(sysctl -n vm.stats.vm.v_page_count)
free_pages=$(sysctl -n vm.stats.vm.v_free_count)
used_percent=$(( (total_pages - free_pages) * 100 / total_pages ))
echo "M:${used_percent}%"
}
# 3. 硬件信息:风扇转速/WiFi强度 (H:转速/WiFi)
get_hw() {
# 需加载 acpi_ibm
fan=$(sysctl -n dev.acpi_ibm.0.fan_speed 2>/dev/null || echo "0")
wifi=$(ifconfig wlan0 list sta | tail -1 | awk '{print $5}' 2>/dev/null || echo "0")
echo "F:${fan}|W:${wifi}%"
}
# 4. 电池 (含状态图标)
get_battery() {
cap=$(sysctl -n hw.acpi.battery.life)
state=$(sysctl -n hw.acpi.battery.state)
[ "$state" -eq 2 ] && echo "⚡$cap%" && return
echo "🔋$cap%"
}
while true; do
echo "$(get_cpu) | $(get_mem) | $(get_hw) | $(get_battery) | $(date +'%H:%M')"
sleep 5
done
脚本运行环境要求
状态脚本通过
sysctl获取内核信息,需要内核支持ACPI:acpi_ibmThinkPad专用支持acpi_dock处理ThinkPad底座热插拔acpi_video调节屏幕亮度coretemp虽然不是 ACPI 模块,但它提供 sysctl 读取 CPU 每个核心的精确温度
为确保系统启动时加载上述内核模块,需要配置 /boot/loader.conf :
配置系统启动时加载ACPI相关模块
acpi_ibm_load="YES"
acpi_video_load="YES"
acpi_dock_load="YES"
coretemp_load="YES"
另外,为确保CPU能够动态调节频率(对 ThinkPad X220笔记本 续航至关重要),需要确保 /etc/rc.conf 中开启了 powerd 电源管理:
确保
/etc/rc.conf 启用了 powerdpowerd_enable="YES"
亮度调节
sway默认的 config 配置是设置使用 brightnessctl 调节屏幕亮度,这要求系统安装 light 软件包。如果没有安装该软件包,也可以改成以下方式直接使用 sysctl 调节:
设置通过sysctl直接调整亮度
# Special keys to adjust brightness via brightnessctl
bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%-
bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+
备注
我的实践发现调整 ThinkPad X220笔记本 的亮度键, hw.acpi.video.lcd0.brightness 值确实变化,但是实际屏幕亮度却没有改变。暂时不知道怎么解决,以后再说
我也没有找到如何安装 brightnessctl 方法