中文 | [English](README.md)

# ukui-media

[UKUI](https://www.ukui.org/) 桌面环境的媒体工具集。

## 概述

ukui-media 为 UKUI 提供核心音频管理组件，包括系统托盘音量控制、控制中心音频设置插件、
声音主题播放、登录提示音以及硬件静音 LED 控制。本项目最初 fork 自 MATE Media，
现已基于 Qt 6 和 PulseAudio 进行了全面重写。

## 组件说明

| 目录 | 可执行文件 / 插件 | 说明 |
|------|-------------------|------|
| `ukui-volume-control-applet-qt/` | `ukui-volume-control-applet-qt` | 系统托盘小程序，提供音量滑块、单应用音量控制、OSD 显示、耳机接口选择弹窗及蓝牙电量监控。通过会话 D-Bus 暴露 `org.ukui.media` 接口。 |
| `audio/` | `libaudio.so`（插件） | **ukui-control-center** 音频设置插件。提供输出/输入设备选择、音量与平衡、声音效果/主题、单声道音频、降噪、开关机提示音开关等功能。 |
| `sound-theme-player/` | `sound-theme-player` | D-Bus 服务（`org.ukui.sound.theme.player`），通过 libcanberra 播放声音主题事件（音量变化、通知等）。 |
| `ukui-login-sound/` | `ukui-login-sound` | 使用 ALSA 直接播放开机提示音，支持按用户配置和首次登录检测。 |
| `ukui-media-control-led/` | `ukui-media-control-led` | 守护进程，监听系统 D-Bus 上的静音状态信号，通过 sysfs 控制硬件静音/麦克风静音 LED。以 systemd 服务运行。 |
| `common/` | （共享源码） | 共享工具：音量换算、系统版本检测、JSON 配置读写、GSettings/D-Bus 常量定义。 |
| `configuration/` | （数据文件） | PulseAudio ALSA 混音器路径和配置集，针对特定硬件（USB 音频设备、国产机型）。包含 udev 规则。 |
| `scripts/` | （Shell 脚本） | 声卡适配脚本和输出模式检测工具。 |
| `data/` | （数据文件） | GSettings schema、图标、desktop 文件、systemd 单元。 |
| `tests/` | （单元测试） | 基于 Google Test 的各组件测试套件，支持 gcov 覆盖率统计。 |

## D-Bus 接口

- **`org.ukui.media`**（会话总线，`/org/ukui/media`）— 音量控制小程序。
  获取/设置默认设备、音量、静音状态；单应用音频路由；
  蓝牙电量查询（`org.ukui.media.bluetooth`）。

- **`org.ukui.sound.theme.player`**（会话总线）— 声音主题播放器。
  `playAlertSound(QString soundEvent)`。

- **`org.ukui.media`**（系统总线）— LED 控制守护进程。
  监听 `systemOutputVolumeIsMute` / `systemInputVolumeIsMute` 信号。

## 构建依赖

**Qt 6：** `qt6-base-dev` `qt6-svg-dev` `qt6-tools-dev-tools`

**音频：** `libasound2-dev` `libcanberra-dev` `libpulse-dev` `libsndfile1-dev`

**GLib / GIO：** `libglib2.0-dev` `libdconf-dev`

**UKUI / 麒麟 SDK：** `libukcc-dev` `libukui-log4qt-dev` `libgsettings-qt6-dev`
`libkysdk-applications-dev` `libkysdk-system-dev` `libkf6windowsystem-dev`

**其他：** `libxml2-dev` `libxext-dev` `intltool`

**测试（可选）：** `libgtest-dev`

## 构建方法

### 快速构建

```bash
qmake6 PREFIX=/usr
make -j$(nproc)
```

### 安装

```bash
sudo make install
```

### 构建 Debian 包

```bash
sudo apt build-dep .
debuild -us -uc
```

## 运行测试

```bash
cd tests
qmake6
make -j$(nproc)
./unit_test_sound_theme_player/unit_test_sound_theme_player
# ... 或运行所有测试二进制文件
```

## 项目结构

```
ukui-media/
├── audio/                          # 控制中心音频插件
├── ukui-volume-control-applet-qt/  # 系统托盘音量小程序
├── sound-theme-player/             # 声音主题 D-Bus 服务
├── ukui-login-sound/               # 登录提示音播放器
├── ukui-media-control-led/         # 硬件静音 LED 守护进程
├── common/                         # 共享库代码
├── configuration/                  # PulseAudio 硬件配置
├── scripts/                        # 声卡适配脚本
├── data/                           # Schema、图标、desktop 文件
├── tests/                          # 单元测试 (gtest)
├── man/                            # 手册页
├── debian/                         # Debian 打包文件
└── ukui-media.pro                  # 顶层 qmake 工程文件
```

## 许可证

ukui-media 基于 GNU 通用公共许可证 v2.0 或更高版本发布。
完整许可证文本请参阅 [COPYING](COPYING)。各子组件可能使用不同许可证，
详见 [debian/copyright](debian/copyright)。

## 相关链接

- 主页：<https://gitee.com/openkylin/ukui-media>
- 问题追踪：<https://gitee.com/openkylin/ukui-media/issues>
- Debian 打包：<https://salsa.debian.org/kylin-team/ukui-media>
