+++ title = "Linux下的命令行操控" date = 2023-07-20 [taxonomies] tags = ["Linux"] +++ 前言 本文基于常见发行版(systemd + NetworkManager + PipeWire/ PulseAudio / ALSA),目标是把常见的桌面/笔记本硬件(Wi-Fi、蓝牙、亮度、音量)通过命令行可复现、可理解地组织起来。 # Wifi 控制 现代桌面大多使用 NetworkManager 管理网络,`nmcli` 是其命令行接口。`nmcli` 能列出可用网络、连接/断开、创建配置文件(包括 WPA/WPA2/PSK、enterprise)等。相比直接编辑 wpa_supplicant 配置,`nmcli` 更安全、统一,能与 GUI 保持一致。 ### 常用命令 列出接口及设备状态: ```bash nmcli device status ``` 列出附近 Wi-Fi(SSID、信号强度、安全类型): ```bash nmcli device wifi list ``` 交互式连接(会提示输入密码): ```bash nmcli device wifi connect "wifi-2.4G" --ask ``` 不交互式连接(将密码放在命令里 — 注意安全风险): ```bash nmcli device wifi connect "wifi-2.4G" password "your_password" ``` 基于已有配置文件连接(例如创建一个保存的 connection 名称): ```bash # 创建连接(自动选择设备) nmcli connection add type wifi ifname wlan0 con-name my-home ssid "wifi-2.4G" \ wifi-sec.key-mgmt wpa-psk wifi-sec.psk "your_password" # 启用连接 nmcli connection up my-home ``` 断开或禁用接口: ```bash # 断开当前连接 nmcli device disconnect wlan0 # 禁用设备(软禁用) nmcli device set wlan0 managed no ``` 查看连接详情: ```bash nmcli -f all connection show my-home nmcli device show wlan0 ``` --- # 蓝牙控制 Linux 上常见蓝牙栈为 BlueZ(蓝牙守护 `bluetoothd`),`bluetoothctl` 提供交互式 CLI。音频设备通常通过 BlueZ + PulseAudio(或 PipeWire)进行音频路由;配对/信任步骤必须完成才能稳定连接音频/键盘/鼠标等设备。 ### 一、蓝牙服务与模块启用/禁用 启用蓝牙服务(systemd): ```bash sudo systemctl enable --now bluetooth.service ``` 打开蓝牙适配器电源: ```bash bluetoothctl power on ``` 打开配对代理(用于交互式配对)并设置为默认: ```bash bluetoothctl agent on bluetoothctl default-agent ``` 开启可发现(让其它设备能扫描到): ```bash bluetoothctl discoverable on ``` 重启蓝牙服务(排错常用): ```bash sudo systemctl restart bluetooth sudo journalctl -u bluetooth -f ``` > 注意:某些发行版在使用 PipeWire 做音频时还需要 `pipewire` / `wireplumber` 正确运行,否则音频通道(A2DP/HFP)无法建立。 ### 二、查看设备与状态 ```bash # 列出本机所有蓝牙适配器 bluetoothctl list # 查看本地适配器详细状态 bluetoothctl show # 查看已配对设备 bluetoothctl paired-devices # 查看某个设备详情(包括 UUID、已连接服务) bluetoothctl info AA:BB:CC:DD:EE:FF ``` ### 三、交互式配对与连接 交互式步骤(在 `bluetoothctl` 提示符下): ```text $ bluetoothctl [bluetooth]# power on [bluetooth]# agent on [bluetooth]# default-agent [bluetooth]# scan on # 等待几秒,看到目标设备(并记录 MAC) [bluetooth]# pair AA:BB:CC:DD:EE:FF # 如果是需要 PIN 的设备,会提示配对码;确认或输入即可 [bluetooth]# trust AA:BB:CC:DD:EE:FF # 使系统信任设备(开机后自动连接) [bluetooth]# connect AA:BB:CC:DD:EE:FF [bluetooth]# exit ``` ### 四、断开与删除设备 断开连接: ```bash bluetoothctl disconnect AA:BB:CC:DD:EE:FF ``` 删除配对信息(“忘记设备”): ```bash bluetoothctl remove AA:BB:CC:DD:EE:FF ``` ### 五、蓝牙软/硬封锁 查看封锁状态: ```bash rfkill list bluetooth ``` 封锁(禁用): ```bash sudo rfkill block bluetooth ``` 解封(启用): ```bash sudo rfkill unblock bluetooth ``` 如果设备被**硬封锁**(硬件开关),软件方法无效,需要物理开关或 BIOS 设置。 ### 六、音频输出切换 * 现代发行版多用 PipeWire 替代 PulseAudio,但 PipeWire 提供兼容接口,因此 `pactl`(PulseAudio 控制工具)在很多系统仍然可用。 * 蓝牙设备会在连接后生成类似 `bluez_output.XX_XX_XX_XX_XX_XX.a2dp_sink` 的 sink 名称;有时名称会略有差异,建议先查询。 列出 sinks(输出设备): ```bash pactl list short sinks ``` 设置默认输出为蓝牙耳机(示例): ```bash pactl set-default-sink bluez_output.XX_XX_XX_XX_XX_XX.a2dp_sink ``` 把当前正在播放的流移动到蓝牙设备: ```bash pactl list short sink-inputs # 找到输入编号 pactl move-sink-input <输入编号> bluez_output.XX_XX_XX_XX_XX_XX.a2dp_sink ``` 如果使用 PipeWire,遇到连接但没有声音的问题: * 确保 `wireplumber` 或 `pipewire-media-session` 正常运行。 * 检查 profile(A2DP vs HFP):A2DP 提供高音质但不可通话,HFP 可通话但质量较低。可通过 `pactl list cards` / `pactl set-card-profile` 调整。 --- # 亮度控制 笔记本屏幕亮度通常由内核暴露的 SysFS 接口 `/sys/class/backlight/*/brightness` 提供,写入该文件需要 root 权限或合适的权限(udev 规则)。桌面显示器、USB 显卡或 Wayland(特别是 wlroots)环境可能不会使用该接口,需要使用专门工具(如 `light`、`brightnessctl`、或 DE/Compositor 提供的接口)。 ### 一、SysFS(多数笔记本适用) 查看最大亮度值与当前亮度: ```bash cat /sys/class/backlight/*/max_brightness cat /sys/class/backlight/*/brightness ``` 设置亮度(需要 root): ```bash # 写入数值(0~max_brightness) echo 5 | sudo tee /sys/class/backlight/*/brightness # 或者重定向(注意 sudo 的作用域) sudo sh -c 'echo 5 > /sys/class/backlight/*/brightness' ``` 如果遇到 “权限被拒绝”: * 使用 `sudo tee` 或 `sudo sh -c`;或添加 udev 规则给某个用户写权限。 * 在某些内核/驱动下,背光接口名称可能不同(`intel_backlight`、`amdgpu_bl0` 等)。 ### 二、brightnessctl `brightnessctl` 是一个用户友好、支持百分比与设备选择的工具。 安装: * Debian/Ubuntu: ```bash sudo apt install brightnessctl ``` * Arch: ```bash sudo pacman -S brightnessctl ``` 用法示例: ```bash brightnessctl info # 显示当前设备信息 brightnessctl get # 当前亮度 brightnessctl max # 最大亮度 brightnessctl set +10% # 增加 10% brightnessctl set 50% # 设为 50% ``` --- # 音量控制 Linux 下有几层音量控制:硬件(ALSA)、中间层(PulseAudio / PipeWire)、用户层(桌面音量控制器)。常用命令行工具:`pactl`(PulseAudio / PipeWire)、`pamixer`(PulseAudio 前端)、`amixer`(ALSA 原生)。 ### 一、pactl(PulseAudio / PipeWire) 查看 sinks: ```bash pactl list short sinks ``` 查看默认 sink: ```bash pactl info | grep 'Default Sink' ``` 设置默认音量: ```bash pactl set-sink-volume @DEFAULT_SINK@ 50% ``` 增量调节: ```bash pactl set-sink-volume @DEFAULT_SINK@ +5% pactl set-sink-volume @DEFAULT_SINK@ -5% ``` 静音/取消静音/切换: ```bash pactl set-sink-mute @DEFAULT_SINK@ 1 pactl set-sink-mute @DEFAULT_SINK@ 0 pactl set-sink-mute @DEFAULT_SINK@ toggle ``` 移动播放流(见蓝牙章节): ```bash pactl list short sink-inputs pactl move-sink-input <输入编号> <目标-sink> ``` ### 二、amixer(ALSA) 列出通道与当前值: ```bash amixer sget Master ``` 设置音量(绝对 / 相对): ```bash amixer sset Master 50% # 绝对值 amixer sset Master 5%+ # 增加 amixer sset Master 5%- # 减少 ``` 静音: ```bash amixer set Master mute amixer set Master unmute amixer set Master toggle ``` > 当使用 PipeWire/PulseAudio 时,`amixer` 仍然可以操作底层硬件,但用户可听到的效果可能被上层音量(PulseWire/PulseAudio)覆盖。 ### 三、pamixer(PulseAudio) 简洁的命令行前端,适合脚本: ```bash pamixer --get-volume pamixer --set-volume 40 pamixer --increase 5 pamixer --decrease 5 pamixer --toggle-mute ``` --- **Done.**