Когда я писал про использование Докера как контейнера с инструментами для работы — вообще‑то речь шла про использование прежде всего доступа через шелл.
Ну в самом деле : файлы они и в Африке файлы, редактирую я их Vim-ом, потому что это удобно, перемещаю MidnightCommander-ом, по той же причине, для обработки используются Makefile, и всё это окна терминалов.
Во множественном числе.
А вот IDE, которые в графическом режиме, как-то не прижились. Ну неудобно, особенно когда меняется версия IDE, а тебе надо поднять старый "проект", который в новой версии без плясок с бубном не соберешь, потому что теперь поменяли то и это, хотя по сути всё сводится все к тем же файлам, библиотекам и скриптам компоновки.
В общем, не понравилось.
Но допустим, нам надо запустить нечто графическое, вон например почту или мессенджер, который зачем-то должен быть именно тут. Да, это тоже можно сделать, причем несколькими способами.
Если контейнер работает локально — всё просто: В контейнере устанавливаем xauth и какой-нибудь эмулятор терминала:
(почему именно xfce4-terminal - чуть дальше. Но не обязательно его, конечно)
apt install xauth xfce4-terminal
И запускаем контейнер например так:
docker run -ti --net host --name x1 my_toolbox
exit
docker start x1
docker exec -d --env DISPLAY=$DISPLAY --user my_user x1 /usr/bin/xfce4-terminal
То есть, указываем переменную окружения DISPLAY на X-сервер хоста, указываем юзера, созданного внутри контейнера, имя контейнера и программу терминала, которая будет запущена. Связь при этом будет идти по сети, через 127.0.0.1
Можно создать контейнер иначе:
docker run -ti -v /tmp/.X11-unix:/tmp/.X11-unix --user my_user x1 /usr/bin/xfce4-terminal
в этом случае связь будет идти через UNIX-сокет типа /tmp/.X11-unix/X0
В остальном все так же.
Для того чтобы работала кириллица при вводе нужно также указать локаль, хотя бы LANG=C.UTF-8
А лучше вообще создать отдельный скрипт, например runx
#!/bin/sh
LANG=C.UTF-8; export LANG
DISPLAY=:0; export DISPLAY
/usr/bin/xfce4-terminal
и запускать его:
docker exec -d --user my_user x1 /home/my_user/bin/runx
Ну, в общем, и всё. Если терминал работает — значит, всё работает. Конкретно у xfce4-terminal есть удобные настройки внешнего вида, возможность задать имя для заголовка конкретного окна (особенно полезно когда окон к разным системам много), и удобная функция открывать новые окна простой комбинацией кнопок, не запуская всё это вручную.
Разумеется, вместо терминала можно запускать любимый мессенджер и наслаждаться живым общением в рабочее время — принцип тот же самый.
Конечно, никакой X-сервер никто в контейнер не засунул: X-сервер это как правило рабочая станция, за которой вы сидите, с монитором, клавиатурой и графической картой, а подключаются к нему программы-клиенты, тот же эмулятор терминала.
Также нет никакой необходимости устанавливать в контейнере «полноразмерный» Desktop Environment — всё это вместе с X‑сервер ом уже есть на вашей рабочей станции.
Хотя можно, конечно.
Но это был случай когда контейнер работает локально. Если есть задача запустить его удаленно, на сервере в датацентре, но тоже хочется чего-нибудь графического - нужно действовать по-другому.
Комментарии (3)
sleirsgoevy
26.12.2024 01:48Заголовок кликбейт. Я уж думала реально Xorg в контейнере запустят...
А я запускала. Просто драйвер моей GPU выпилили из нового дебиана, и пришлось в привилегированном докере запустить Xorg из старого, а весь софт наоборот напрямую на хосте крутился.
kulaginds
26.12.2024 01:48В ubuntu 24.04 появилось обновление tigervnc server, который начал поддерживать OpenGL (даже с последними проприетарными дровами nvidia).
Таким образом можно запустить контейнер с убунтой и tigervnc server с пробросом видеокарты.
lrrr11
пользуйтесь distrobox, там из коробки настроен проброс всех нужных сокетов и переменных окружения для запуска GUI.
К предыдущей статье тоже относится.