Sign inSign up

wjz304/kmscon

By wjz304

Updated 22 days ago

适用于有显卡的 Linux server 主机,直接调用 drm 运行 kmscon

Image
0

1.9K

wjz304/kmscon repository overview

kmscon Docker 镜像

简介

  • 基于 Ubuntu,集成 kmscon(KMS/DRM 终端)及可选音频支持(PulseAudio/PipeWire)。
  • 适用于具备显卡的 Linux 服务器,直接通过 DRM 运行 kmscon

主要环境变量

变量名说明示例
APP_COMMAND覆盖默认执行命令kodi-standalone
TZ时区Asia/Shanghai
LANG语言/区域zh_CN.UTF-8
LIBGL_ALWAYS_SOFTWARE强制软件渲染1
MESA_LOADER_DRIVER_OVERRIDE软件驱动swrast
KMSCON_CONFIGkmscon 额外参数--font-name "Noto Sans CJK SC"

构建镜像

docker build -t kmscon:local kmscon

运行示例

假设宿主机已具备显卡和音频后端(ALSA / PulseAudio / PipeWire),可根据实际环境调整参数。

直接运行(ALSA 简单测试)
docker run --rm \
  -e TZ=Asia/Shanghai -e LANG=zh_CN.UTF-8 \
  --device /dev/dri --device /dev/snd --device /dev/input --cap-add SYS_ADMIN --cap-add SYS_RAWIO \
  -v /run/udev:/run/udev:ro \
  kmscon:local
root 用户下启动 PulseAudio(如需)

仅在确需 root 会话运行 PulseAudio 时:

sudo -i
usermod -a -G pulse-access root
gpasswd -a root pulse
gpasswd -a root pulse-access
sed -i 's/^ConditionUser=!root/#ConditionUser=!root/' /usr/lib/systemd/user/pulseaudio.* 2>/dev/null
sed -i 's/^ConditionUser=!root/#ConditionUser=!root/' /usr/lib/systemd/user/pipewire.* /usr/lib/systemd/user/pipewire-pulse.* 2>/dev/null
systemctl --user enable pulseaudio
systemctl --user start pulseaudio

软件渲染(回退方案)

当硬件驱动不可用或 VA-API 初始化失败时,可通过以下变量回退到软件渲染(性能下降明显):

  • 设置 LIBGL_ALWAYS_SOFTWARE=1 使用软件渲染
  • 配合 MESA_LOADER_DRIVER_OVERRIDE=swrast 强制加载 swrast 驱动

注意事项

  • 确保 XDG_RUNTIME_DIR 与音频 socket 路径与宿主一致且容器有权限访问
  • 根据宿主硬件和驱动选择是否启用软件渲染,避免不必要的性能损失
docker-compose.xml
# version: "3.8"

services:
  kmscon:
    build: .
    image: wjz304/kmscon:latest
    container_name: kmscon
    restart: unless-stopped
    # privileged: true             # 启用特权模式(可选, 注意安全风险)
    # tty: true                    # 分配伪终端
    # stdin_open: true             # 允许交互式终端
    environment:
      - TZ=Asia/Shanghai
      - LANG=zh_CN.UTF-8
      - KMSCON_CONFIG=--font-name "Noto Sans CJK SC"  # kmscon 配置
      # - LIBGL_ALWAYS_SOFTWARE=1            # 强制使用软件渲染(可选)
      # - MESA_LOADER_DRIVER_OVERRIDE=swrast # 强制使用软件渲染(可选)
      # - XDG_RUNTIME_DIR=/run/user/1000     # PulseAudio/PipeWire 支持,需额外配置(可选)
    devices:
      - /dev/dri:/dev/dri          # 显卡直通 (必须)
      - /dev/snd:/dev/snd          # 声卡直通
      - /dev/input:/dev/input      # 输入设备直通(键盘、鼠标、遥控器等)
    volumes:
      - /run/udev:/run/udev:ro     # 使容器能读取设备信息(设备热插拔、输入设备、GPU/DRM 等元数据)
      # - /run/user/1000/pulse/native:/run/user/1000/pulse/native # PulseAudio 支持,需额外配置(可选)
      # - /run/user/1000/pipewire-0:/run/user/1000/pipewire-0     # PipeWire 支持,需额外配置(可选)
    cap_add:
      - SYS_ADMIN                  # 允许使用 ioctl 等操作 DRM 设备
      - SYS_RAWIO                  # 允许直接访问硬件设备
    # network_mode: host           # 使用宿主网络模式 (可选,UPnP/DLNA 及 AirPlay 需要)
    shm_size: "1gb"
    security_opt:
      - seccomp=unconfined

Tag summary

Content type

Image

Digest

sha256:1a5a3d35d

Size

305.4 MB

Last updated

22 days ago

docker pull wjz304/kmscon