====== Device access ======
Search tags:
* GPU forwarding
* serial port forwarding
===== serial port =====
==== privileged LXCs ====
Only need to bind mount device node.
Example PCT config:
lxc.cgroup.devices.allow = c 188:0 rwm
lxc.mount.entry: /dev/ttyUSB0 dev/ttyUSB0 none bind,optional,create=file
Device major 188 is for ''ttyUSBx devices''
==== unprivileged LXCs ====
Unprivileged LXCs has UIDs and GIDs mapped to defines subid and subgids ranges.
To get access to ''ttyUSB0'' as ''dialout'' group (GID=20) host needs to give permissions to access ''ttyUSB0'' for GID=100020.
Simple but dirty method is to chown 100000:100020 /dev/ttyUSB0
(TODO: consider using ''setfacl'')
Another method mentioned in [[https://gist.github.com/crundberg/a77b22de856e92a7e14c81f40e7a74bd|Setup deCONZ on unprivileged Proxmox container]]
is to do not touch ''/dev/ttyUSB0'' but create another device node with the same device major:minor. Then change owner of new device node and use it to bind mount into container.
==== References ====
* [[https://forum.proxmox.com/threads/usb-passthrough-to-a-container-lxc.101741/|USB passthrough to a container LXC]]
* [[https://www.reddit.com/r/Proxmox/comments/saxqm2/passing_igpu_through_to_unprivileged_lxc_help/|Passing iGPU through to unprivileged LXC [HELP]]]
* [[https://forum.proxmox.com/threads/passing-usb-device-on-lxc-not-working-after-upgrade-to-7-0.92178/|Passing USB device on LXC not working after upgrade to 7.0]]
* Zigbee2MQTT automated LXC setup scripts (privileged containers):
* [[https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func|build.func]]
====== DRI forward ======
Host system (Proxmox):
$ls -ln /dev/dri
crw-rw---- 1 0 44 226, 0 03-26 11:53 card0
crw-rw---- 1 0 103 226, 128 03-26 11:53 renderD128
In unprivileged PCT GIDs and UIDs are shifted +100000, so if guest wants to access device with GID=44, from host point of view it is accessing it as GID=100044.
So now is needed to do shift GID 44 and GID 103.
Idea is to define ranges of GID mappings to map all other GID to be shifted by +100000:
^ Container GID ^ Host GID ^ count ^
| 0..43 | 100000..100043 | 44 |
| 44 | 44 | 1 |
| 45..102 | 100045..100102 | 58 |
| 103 | 103 | 1 |
| 104..65535 | 100104..165535 | 65431 |
Here is a tool [[https://github.com/ddimick/proxmox-lxc-idmapper|Proxmox unprivileged container/host uid/gid mapping syntax tool]]
Allow LXC (running as root) to map GID 44 and 103 to new ones:
root:100000:65536
root:44:1
root:103:1
PCT config file:
lxc.cgroup2.devices.allow: a
lxc.cap.drop:
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
lxc.idmap: u 0 100000 65536
lxc.idmap: g 0 100000 44
lxc.idmap: g 44 44 1
lxc.idmap: g 45 100045 58
lxc.idmap: g 103 103 1
lxc.idmap: g 104 100104 65431
Guest system:
usermod -aG 44 user
usermod -aG 103 user
apt install drm-info
drm_info
====== TODO - check ======
* [[https://forum.proxmox.com/threads/terramaster-f2-423-proxmox-n5095-igpu-passthrough-issue.123144/#post-536224]]
* [[https://forum.proxmox.com/threads/plex-hw-transcoding-lxc-and-jasper-lake-igpu-passthru.116163/#post-556945]]