Кидок USB-принтера в контейнер LXD

Хочу поділитися знайденим рішенням по пробросу принтера HP LaserJet 1000 в контейнер, створений за допомогою LXD.

Трохи передісторії
Є домашній сервер на базі старого ноутбука Acer Aspire 5520G, який використовується для всяких експериментів. На ньому була встановлена Ubuntu 14.04 і створено кілька контейнерів за допомогою LXC, один з яких використовувався як принт-сервер.

Прокид принтера був здійснений шляхом додавання в файл конфігурації гостя наступних рядків:

lxc.cgroup.devices.allow = c 189:* rwm
lxc.mount.entry = /dev/bus/usb/003 dev/bus/usb/003 none bind,optional,create=dir
lxc.mount.entry = /dev/usb/lp0 dev/usb/lp0 none bind,optional,create=file

Все працювало відмінно, але захотілося оновитися до Ubuntu 16.04 і спробувати LXD.

Виявилося, що старі файли конфігурації не працюють і потрібно шукати нове рішення. Ось їм-то і хочу поділитися.

Приступаємо до пробросу
Отже, Ubuntu 16.04+LXD встановлено, контейнер на базі тієї ж Ubuntu 16.04 створений, приступаємо до пробросу.
Для початку з'ясуємо, куди підключений принтер на хості:

root@aspire-5520g:~# lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 004: ID 0bda:8197 Realtek Semiconductor Corp. RTL8187B Wireless Adapter
Bus 001 Device 003: ID 5986:0102 Acer, Inc Crystal Eye Webcam
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 03f0:0517 Hewlett-Packard LaserJet 1000
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Принтер підключений на Bus 003 Device 002, іншими словами, йому відповідає unix-char файл /dev/bus/usb/003/002
З'ясуємо, хто є його власником і з якими правами:

root@aspire-5520g:~# ls -l /dev/bus/usb/003/002
crw-rw-r-- 1 root lp 189, 257 Лип 15 16:02 /dev/bus/usb/003/002

Файл належить користувачу root і групі lp, права на файл 0664. Дана інформація стане в нагоді нам у майбутньому.
З'ясуємо, який числовий ідентифікатор у групи lp:

root@aspire-5520g:~# cat /etc/group | lp egrep
lp:x:7:

Група lp має числовий ідентифікатор 7.
Тепер з'ясуємо, хто є власником і з якими правами, файлу lp0:

root@aspire-5520g:~# ls -l /dev/usb/lp0
crw-rw---- 1 root lp 180, 0 Лип 15 16:02 /dev/usb/lp0

Файл належить користувачу root і групі lp з правами 0660.

Пробросим принтер в контейнер
Насправді, все виявилося не дуже й складно. В моєму випадку контейнер називається print, а пристрій я вирішив назвати lj1000. Для перенесення треба виконати кілька простих маніпуляцій:

root@aspire-5520g:~# lxc config add device print lj1000 unix-char path=/dev/bus/usb/003/002 mode=0664 gid=7
Пристрій lj1000 додається до print
root@aspire-5520g:~# lxc config add device print lp0 unix-char path=/dev/usb/lp0 gid=7
Пристрій lp0 додається до print

Перша команда здійснює кидок unix-char пристрої з правами 0664 і належить групі 7 (lp), друга команда здійснює кидок пристрою lp0 з правами за замовчуванням (0660) і належить до тієї ж групи 7.

От і все. Прокид пристрою здійснено. Далі необхідно встановити принтер в контейнері:

root@aspire-5520g:~# lxc exec print -- apt update && apt upgrade -y && apt install hplip -y
root@aspire-5520g:~# lxc exec print -- hp-setup -i

Тут просто слідуємо інструкції інсталятора. Результатом повинна стати роздрукована пробна сторінка друку.

От і все, от таким способом пробрасывается принтер всередину контейнера створеного за допомогою LXD. Думаю, що будь-яке інше пристрій пробрасывается подібним способом.

Всім дякую за увагу.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.