In questo articolo spiegherò come installare e utilizzare un'applicazione grafica su docker. In questo modo, puoi eseguire applicazioni che non sono aggiornate nei repository Pardus, ma che ti servono, senza la necessità di installare una distribuzione separata.

In questo articolo, eseguiremo un'applicazione krita sull'immagine di test debian usando docker come esempio.

Preparazione

Metodo 1: Puoi installare la finestra mobile come segue. La finestra mobile che installi in questo modo funzionerà solo con l'utente root o con l'utente aggiunto al gruppo docker.

apt update apt install docker.io

Metodo 2: Puoi installare la finestra mobile senza root come segue. Docker installato in questo modo funziona senza root, ma con privilegi limitati.

Installiamo prima i pacchetti necessari.

apt installa curl dbus-user-session

Quindi, impostiamo le impostazioni subuid e subgid eseguendo i seguenti due comandi con root.

usermod --add-subgids 1002000000-1002999999 usermod --add-subuid 1002000000-1002999999

Quindi, installiamo la finestra mobile senza root sul nostro utente utilizzando il seguente comando.

curl -fsSL https://get.docker.com/rootless | bash

I comandi Docker sono stati aggiunti nella directory bin nella nostra home directory. Aggiungiamo quanto segue a bashrc per inserirli in PATH.

esporta PERCORSO=~/bin/:$PERCORSO

Impostazione dell'autorizzazione all'uso di Docker

I privilegi di root sono necessari per utilizzare la finestra mobile non rootless. Pertanto, puoi concedere l'autorizzazione docker all'utente procedendo come segue.

# Dopo questo processo, potrebbe essere necessario disconnettersi e accedere. usermod -aG utente docker

Non: Se concedi i privilegi di docker all'utente, gli stai dando l'equivalente dei privilegi di root. Questo può causare problemi di sicurezza. Questa procedura è pertanto sconsigliata.

Per maggiori informazioni: https://docs.docker.com/engine/security/#docker-daemon-attack-surface

Consiglio invece di utilizzare la finestra mobile senza root.

Download dell'immagine

Per eseguire la nostra applicazione, dobbiamo scaricare l'immagine della distribuzione che desideri.

finestra mobile pull debian:testing

Impostazione delle autorizzazioni per video e audio

Dobbiamo utilizzare i seguenti comandi affinché la nostra applicazione in esecuzione su Docker effettui correttamente le richieste di creazione di finestre e controlli correttamente il suono dell'applicazione. Questi processi devono essere ripetuti ogni volta che riavviamo il nostro computer.

# xhost +local per accettare le richieste della finestra locale: # pactl load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 per aprire un server audio pulseaudio (accetta solo le richieste locali)

Creazione contenitore

Creiamo un contenitore dalla nostra immagine docker scaricata. Qui passeremo la variabile ambientale DISPLAY e concederemo l'autorizzazione completa all'hardware e all'accesso alla rete. Collegheremo anche le home directory insieme. In questo modo, non ci saranno problemi durante l'utilizzo del nostro hardware e della connessione di rete, e potremo vedere e modificare facilmente i nostri file.

docker run \ -it \ -e DISPLAY=$DISPLAY \ -e PULSE_SERVER=127.0.0.1\ -v /dev/dri:/dev/dri \ --net host \ -v /home:/home \ --name gui_application \ debian:test

Ecco le spiegazioni dei parametri:

  • -it per aprire la shell interattiva
  • -e DISPLAY=$DISPLAY per passare la variabile ambientale
  • -e PULSE_SERVER=127.0.0.1 per il server audio pulseaudio
  • –net host per l'accesso alla connessione di rete completamente autorizzato
  • -v /dev/dri: /dev/dri per accedere alla scheda video
  • -v /home:/home per rendere comune la directory home
  • –name per specificare il nome del contenitore gui_application

Dopo la creazione del contenitore, verrà avviata una nuova shell con l'utente root all'interno del contenitore.

Installazione dell'applicazione

Dopo essere entrati nel contenitore, possiamo installare la nostra applicazione.

apt update apt install krita

Affinché la nostra applicazione utilizzi la home directory comune e funzioni con privilegi simili, creiamo un utente con lo stesso nome del nostro nome utente. L'UID di questo utente deve essere uguale a quello del nostro utente.

Puoi cambiare l'utente adduser # uid in /etc/passwd. id user -> uid=1000(user) gid=1000(user) groups=1000(user) # Dobbiamo aggiungere il nostro utente al gruppo audio e video. (per scheda audio e video) usermod -aG utente audio usermod -aG utente video

Se la directory /dev/dri nel contenitore non appartiene al gruppo video, correggiamo i suoi permessi.

chgrp video -R /dev/dri

Avvio dell'applicazione

Innanzitutto, passiamo al nostro utente con il comando su, quindi eseguiamo il comando della nostra applicazione.

su utente krita

Quando usciamo dal contenitore o riavviamo il sistema, possiamo trovare il valore container-id dell'immagine che abbiamo chiamato nell'output docker ps -a e riavviarlo come docker start e quindi docker attach per accedere nuovamente. Se non ne abbiamo più bisogno, possiamo eliminare il contenitore con il comando docker rm.

docker ps -a -> CONTAINER ID IMAGE COMMAND CREATED STATUS PORT NAMES -> 8b8862d05e24 debian:testing "bash" 2 ore fa Exited (137) 5 minuti fa gui_application docker start 8b8862d05e24 -> 8b8862d05e24 docker attach 8b8862d05e24

Aggiunta al menu dell'applicazione

Per aggiungere la nostra applicazione al menu dell'applicazione, prepariamo uno script come segue e salviamolo in /home/user/.local/bin/docker-krita

#!/bin/bash xhost +local: pactl load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 docker start gui_application docker exec gui_application chgrp -R video /dev/dri docker exec gui_application su $USER -c critica $@

Prepariamo il nostro application launcher come segue e salviamolo in /home/user/.local/share/applications/docker-krita.desktop.

[Desktop Entry] Name=Krita-docker Comment=krita su Docker GenericName=Krita Exec=/home/user/.local/bin/docker-krita %F Icon=krita Terminal=false StartupNotify=true Type=Application Categories=Utility; GTK;

Link utili

https://sulincix.gitlab.io/sayfalar/html/docker-kullanimi.html