Pagina 1 di 1

libvirt - script di avvio da utente semplice

Inviato: mer 24 set 2025, 10:14
da joe
Partiamo dallo scopo, voglio fare uno script che si lancia così:

Codice: Seleziona tutto

joe@machine~: stampa.sh doc.pdf
Ovviamente lo script serve ad inviare un documento PDF in stampa.
Ora, siccome la stampante in questione non c'è stato verso di gestirla nativamente da Linux, ho messo in piedi un sistema quantomeno "esotico":

- si avvia una VM con windows via libvirt
- sul sistema guest è in ascolto una sorta di servizio, in realtà uno script batch, che se trova uno o più PDF in una directory di "fake spool" li invia alla stampante
- la directory di fake spool fa parte di una directory condivisa in rete con la macchina host

In pratica il mio comando "stampa.sh documento.pdf" dovrà:
- avviare libvirt
- avviare la VM windows
- agganciare la stampante (precedentemente accesa e collegata ovvio) via redirezione USB
- montare la directory condivisa (questo manualmente lo faccio da utente semplice avendo predisposto /etc/fstab)
- copiare il documento da stampare nella directory di fake spool

Vediamo i comandi che lancio a mano solitamente:

Codice: Seleziona tutto

su -
/etc/rc.d/rc.libvirt start
virsh start win7
virsh attach-device win7 --file epson-dx4400.xml --live
da utente, in realtà uso un alias che non ricordavo più si appoggiasse a sudo va be', forse serviva comunque sudo per via di CIFS, ad ogni modo:

Codice: Seleziona tutto

sudo /sbin/mount /home/joe/sharelibvirt
cp documento.pdf  sharelibvirt/spool
E a questo punto la stampa del documento dovrebbe partire.

La domanda che volevo porre qui era la seguente:
come posso fare a creare lo script stampa.sh che esegua tutte queste operazioni?
La domanda può sembrare banale, ma l'aspetto "insidioso" è che vorrei lanciarlo da utente semplice. Ovviamente qualcosa richiederà sudo, ma chiedo soprattutto perché in passato con libvirt avviata via sudo avevo riscontrato dei problemi, probabilmente riguardanti permessi vari che ora non ricordo.

Se avete qualche dritta anche e soprattutto in base alla vostra esperienza con libvirt...
Grazie in anticipo! :)

Re: libvirt - script di avvio da utente semplice

Inviato: ven 10 ott 2025, 0:12
da joe
Mi rispondo al volo:
ho provato a copiare nello script i comandi solitamente eseguiti da root a mano. Esempio:

Codice: Seleziona tutto

/etc/rc.d/rc.libvirt start
virsh start win7
virsh attach-device win7 --file epson-dx4400.xml --live
Ho poi configurato sudo per lanciare lo script, che ho chiamato stampa.sh.

Codice: Seleziona tutto

# cat /etc/sudoers.d/stampash
joe master =NOPASSWD: /home/joe/path-to-scripts/stampa.sh
Infine per comodità ho anche fatto un alias in .bashrc

Codice: Seleziona tutto

$ alias stampa
alias stampa='sudo /home/joe/pat-to-scripts/stampa.sh'
Quindi ricapitolando rispondendomi da solo:
- metto i comandi che vanno eseguiti da root nello script
- sarebbe uno script che può funzionare solo se eseguito da root
- allora aggiungo l'esecuzione dello stesso a sudo, impostano che l'utente "joe" possa eseguire lo script come se lo eseguisse root
- e a quel punto i comandi contenuti nello script dovrebbero essere eseguiti allo stesso modo rispetto all'esecuzione manuale da un shell di root.

O per lo meno, nei test che ho condotto nei giorni scorsi sembra funzionare tutto come atteso.
Se ci possono essere sorprese, e a qualcuno saltasse all'occhio la possibilità di malfunzionamenti con un approccio del genere, sono tutt'orecchi! ;)