Недавно появилась необходимость поставить Max под Linux.
Но так как мы все наслышаны про его возможности не хотелось его запускать на хосте, и как славно что на linux'e есть docker и всякого рода утилиты для простого создания песочниц, одна из таких это firejail.
Зачем вообще Firejail
Основная идея была простой:
- не давать приложению доступ ко всему $HOME;
- изолировать сеть;
- ограничить доступ к устройствам;
- скрыть часть информации о системе;
- убрать лишние capability;
- минимизировать количество того, что приложение вообще может увидеть.
0. Устанавливаем firejail
sudo apt install -y firejail
Теперь делаем все из под User'a, не из под рута
1. Скачиваем Max для debian/ubuntu и распаковываем
mkdir /tmp/max
cd /tmp/max
wget https://download.max.ru/linux/deb/pool/main/m/max/MAX-26.15.4.69919.deb
7z x MAX-26.15.4.69919.deb
tar xf data.tar
2. После распаковки получаем каталог usr/share в котором лежат потроха max'a. раскидываем по каталогам
mv usr/share/max/ ~/
mv usr/share/icons/* ~/.local/share/icons/
sed "s#Exec=.*#Exec=firejail --profile=Max /home/$USER/max/bin/max %U#" usr/share/applications/max.desktop > ~/.local/share/applications/max.desktop
chmod -x ~/max/bin/max-service/bin/max-service
3. Настраиваем профиль firejail'a
Я внутри sandbox'a создавал сетевый интерфейс который вешал на интерфейс докера, у вас докера может не быть поэтому вам надо будет поднастроить
mkdir -p ~/.config/firejail/ /home/$USER/Downloads/Max /home/$USER/.local/share/ONEME
FIREJAIL_INT=docker0
FIREJAIL_IP=172.17.0.212
FIREJAIL_GW=172.17.0.1
cat <<EOF > ~/.config/firejail/Max.profile
whitelist /home/$USER/max/
whitelist /home/$USER/.local/share/ONEME
whitelist /home/$USER/Downloads/Max
tmpfs /home/$USER/.local/share/ONEME/logs
whitelist /home/$USER/.themes
whitelist /home/$USER/.config/gtk*
whitelist /home/$USER/.local/share/fonts
include whitelist-run-common.inc
private-tmp
private-dev
private-cache
private-bin /bin/bwrap
private-lib yes
private-etc ssl,ca-certificates,fonts,mime.types,nsswitch.conf,ld.so.cache
blacklist /var
blacklist /usr/src
blacklist /opt
# network
net $FIREJAIL_INT
ip $FIREJAIL_IP
netmask 255.255.255.0
defaultgw $FIREJAIL_GW
mac 1c:1a:df:f7:13:35
dns 77.88.8.8
dns 77.88.8.1
hostname $HOSTNAME
nosound # отключает звуковую систему полностью
novideo
caps.drop all
machine-id
disable-mnt
#rmenv ENVIRONMENT # удалить env из sandbox
#env PATH=/home/$USER/.local/bin:/usr/bin # задать env
EOF
4. Пробуем запускаем
firejail --profile=Max /home/$USER/max/bin/max
5. Если появилось окно, поздравляю/соболезную вам. Регистрация все равно должно произойти с мобильного устройства, потом считываем QR.
6. Проблемы которые заметил
- Звонки не работают, там не может запуститься служба max-service, не стал разбираться, поэтому просто отобрал у него права на запуск
[10-05-2026 23:23:08.018] [Warning] [CallsSDK]processResponse(): GetStatus RPC failed: failed to connect to all addresses; last error: UNKNOWN: ipv4:127.0.0.1:58680: Failed to connect to remote host: Connection refused (/components/calls/native/src/calls_manager.cpp:91)
Docker
В докере его запускать никакого желания не было, хотя по сути это было бы гораздо проще, по идее только прокинуть переменные для X11, потому что версии MAX 26.14.2 почему то не хочет/может работать с wayland.
Для докера такое должно сработать:
docker run --name max -it -v /home/$USER/Max:/home/$USER/Max -u 1000 -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -h $HOSTNAME -e WAYLAND_DISPLAY=$WAYLAND_DISPLAY -e LANG="ru_RU.UTF-8" -e DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS -v $XDG_RUNTIME_DIR:$XDG_RUNTIME_DIR -v $HOME/.Xauthority:/home/$USER/.Xauthority ubuntu:24.04 bash
ну и не забыть поставить кучу зависимостей...
docker exec -it -u 0 max bash
apt update
apt install -y libglx0 libopengl0 libxkbcommon0 libglib2.0-0 libgl1 libpulse0 libgssapi-krb5-2 libegl1 libfontconfig1 libnss3 libxcomposite1 libxdamage1 libxfixes3 libxrender1 libxrandr2 libxtst6 libxi6 libasound2t64 libxkbfile1 libnotify4 locales libxcb-cursor0 libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xfixes0 libxcb-xinerama0 libxkbcommon-x11-0 libpipewire-0.3-0 libxcb-cursor0 x11-utils libsecret-1-0 libgcrypt20 libsecret-1-dev
echo -e "ru_RU.UTF-8 UTF-8\nen_US.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen
и можно запускать МАКС… если что секреты он хранит в keyring'e
В заметке могут быть неточности :-)
Комментарии ()