Incus 容器运行图形程序

准备 #

工程配置:

$ incus project show user-1000
config:
  features.images: "true"
  features.networks: "false"
  features.networks.zones: "true"
  features.profiles: "true"
  features.storage.buckets: "true"
  features.storage.volumes: "true"
  restricted: "true"
  restricted.containers.nesting: allow
  restricted.devices.disk: allow
  restricted.devices.disk.paths: /home/king,/run/user/1000
  restricted.devices.gpu: allow
  restricted.devices.proxy: allow
  restricted.devices.usb: allow
  restricted.idmap.gid: "1000"
  restricted.idmap.uid: "1000"
  restricted.networks.access: incusbr-1000
  restricted.snapshots: allow

idmap 配置,参考 映射本地路径:

$ cat /etc/subuid
king:100000:65536
root:1000000:1000000000
root:1000:1
$ cat /etc/subgid
king:100000:65536
root:1000000:1000000000
root:1000:1

需要的目录:

$ mkdir -p ~/Incus/debian
$ mkdir -p ~/.fonts

创建 profile #

$ incus profile create debian
$ incus profile edit debian
config:
  boot.autostart: "true"
  boot.autorestart: "false"
  security.nesting: "true"
  raw.idmap: both 1000 1000
  cloud-init.vendor-data: |
    #cloud-config
    write_files:
      - path: /etc/profile.d/desktop.sh
        permissions: '0644'
        content: |
          export LANG=en_US.UTF-8
          export LC_ALL=en_US.UTF-8
          export WAYLAND_DISPLAY=/mnt/wayland-1
          export PIPEWIRE_REMOTE=unix:/mnt/pipewire-0
          export PULSE_SERVER=unix:/mnt/pulse-native
          dbus-update-activation-environment --systemd --all
      - path: /etc/apt/sources.list.d/debian.sources
        permissions: '0644'
        content: |
          Types: deb
          URIs: https://mirrors.tuna.tsinghua.edu.cn/debian
          Suites: trixie trixie-updates trixie-backports
          Components: main contrib non-free non-free-firmware
          Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
          Types: deb
          URIs: https://mirrors.tuna.tsinghua.edu.cn/debian-security
          Suites: trixie-security
          Components: main contrib non-free non-free-firmware
          Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
    users:
      - name: debian
        uid: 1000
        shell: /usr/bin/bash
    timezone: Asia/Shanghai
    runcmd:
      - rm -f /etc/apt/sources.list
      - sed -i '/^Types/s/^/\n/' /etc/apt/sources.list.d/debian.sources
      - apt update
      - apt install -y pciutils mesa-utils pipewire-audio tree fonts-dejavu fonts-wqy-microhei
      - apt install -y gnome-themes-extra nwg-look firefox-esr foot
devices:
  root:
    path: /
    pool: default
    type: disk
  dsh:
    source: /home/king/Incus/debian
    path: /home/debian
    type: disk
  fonts:
    source: /home/king/.fonts
    path: /home/debian/.fonts
    readonly: true
    type: disk
  eth0:
    name: eth0
    host_name: debian
    network: incusbr-1000
    type: nic
  gpu:
    type: gpu
  wayland-socket:
    connect: unix:/run/user/1000/wayland-1
    listen: unix:/mnt/wayland-1
    type: proxy
    bind: instance
    mode: "0700"
    uid: "1000"
    gid: "1000"
    security.gid: "1000"
    security.uid: "1000"
  pipewire-0:
    connect: unix:/run/user/1000/pipewire-0
    listen: unix:/mnt/pipewire-0
    type: proxy
    bind: instance
    mode: "0700"
    uid: "1000"
    gid: "1000"
    security.gid: "1000"
    security.uid: "1000"
  pulse-native:
    connect: unix:/run/user/1000/pulse/native
    listen: unix:/mnt/pulse-native
    type: proxy
    bind: instance
    mode: "0700"
    uid: "1000"
    gid: "1000"
    security.gid: "1000"
    security.uid: "1000"

创建容器 #

$ incus launch images:debian/13/cloud debian -p debian

查看 cloud-init 日志:

$ incus exec debian -- tail -fn +1 /var/log/cloud-init-output.log
$ incus exec debian -- tail -fn +1 /var/log/cloud-init.log

查看 cloud-init 运行状态:

$ incus exec debian -- cloud-init status --long
status: done
extended_status: done
boot_status_code: enabled-by-generator
last_update: Thu, 01 Jan 1970 00:00:46 +0000
detail: DataSourceNoCloud [seed=/var/lib/cloud/seed/nocloud-net]
errors: []
recoverable_errors: {}

重启容器:

$ incus restart debian

测试 #

$ incus exec debian -- su - debian -c 'nwg-look'
$ incus exec debian -- su - debian -c 'firefox'

其它 #

代理 #

$ incus exec debian -- vim /etc/profile.d/desktop.sh
文件/etc/profile.d/desktop.sh
export http_proxy="http://192.168.20.120:7890"
export https_proxy="http://192.168.20.120:7890"
export no_proxy="localhost,127.0.0.1"

Flatpak #

$ incus exec debian -- apt install flatpak
$ incus exec debian -- flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo