[Risolto] Eseguire programma su tty2 Ubuntu 20.04

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
matteandroid
Prode Principiante
Messaggi: 6
Iscrizione: martedì 6 luglio 2021, 17:40
Sesso: Maschile

[Risolto] Eseguire programma su tty2 Ubuntu 20.04

Messaggio da matteandroid »

Buongiorno a tutti e grazie di avermi ammesso (dopo l'ultima volta 10 anni fa 😂) su questo splendido forum!
La domanda è lievemente articolata...
Sto svolgendo un tirocinio e abbiamo installato ubuntu 20.04 (ovviamente in modalità testuale) su una minipc che va a rilevare quelle che sono le falle di sicurezza.
Ho scritto uno script bash che va a sostituire il file issue ad ogni accensione indicando i parametri di rete (ip pubblico/privato, dns ecc...).
Ora io vorrei, invece che avere un testo passivo che cambia ad ogni riavvio, poter sostituire la login del tty2 con questo script (devo fare qualche piccola modifica ma per il resto resterebbe uguale) in modo da avere un terminale che mi elenca i parametri di rete aggiornando ogni 5 minuti.
Nelle versioni precedenti di Ubuntu era una cosa fattibile, e ho anche trovato questa guida: https://raymii.org/s/tutorials/Run_soft ... getty.html
Purtroppo questa guida non è aggiornata e non va bene per Ubuntu 20.04...
Qualcuno ha idea di come fare a sostituire SOLO la login del terminale tty2 con uno script (fondamentalmente è un ciclo while con uno sleep all'interno).
Grazie in anticipo per il supporto.
Ultima modifica di matteandroid il domenica 11 luglio 2021, 10:51, modificato 1 volta in totale.
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2842
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Eseguire programma su tty2 Ubuntu 20.04

Messaggio da rai »

Seguendo la parte del tuo link relativa a systemd , con Ubuntu 20.04 non ho avuto problemi ad avere uno script in esecuzione senza login su tty2
matteandroid
Prode Principiante
Messaggi: 6
Iscrizione: martedì 6 luglio 2021, 17:40
Sesso: Maschile

Re: Eseguire programma su tty2 Ubuntu 20.04

Messaggio da matteandroid »

Se posso chiedere, hai eseguito esattamente lo stesso script della guida? perchè il mio sarebbe un ciclo while che si conclude leggendo una variabile da tastiera, e per adesso non mi funziona...
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2842
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Eseguire programma su tty2 Ubuntu 20.04

Messaggio da rai »

Ciao
Mi era parso che la guida usasse htop e/o altre applicazioni che io non ho installate per cui avevo messo in esecuzione uno script corrispondente alla richiesta iniziale:
fondamentalmente è un ciclo while con uno sleep all'interno
quello che posso dire é che dalla tastiera lo script riceveva un eventuale SIGINT (e veniva subito ri-eseguito).
Appena possibile provo con uno script più interattivo e ti faccio sapere
matteandroid
Prode Principiante
Messaggi: 6
Iscrizione: martedì 6 luglio 2021, 17:40
Sesso: Maschile

Re: Eseguire programma su tty2 Ubuntu 20.04

Messaggio da matteandroid »

Grazie mille, in ogni caso ti allego il mio script, inizialmente mi andava, ma dopo due riavvii ha smesso di funzionare... probabilmente è scritto male, sono un elettronico non un informatico :muro:. In pratica dovrebbe leggermi tutte le informazioni di rete prima del login e tenermele sempre aggiornate sul tty1, mentre non deve alterare la possibilità di lavorare sugli altri terminali.


- LO SCRIPT Custom_issue.sh:

Codice: Seleziona tutto

#!/bin/sh
#Now we find all the network parameters regardless of the connection status
PREFIX="WELCOME!"
while true
do
	IF_NAME=$(netstat -r 2>/dev/null | grep -m 1 default | awk '{print $8}')
	IP_PUBLIC_T=$(dig +short myip.opendns.com @resolver1.opendns.com)
	DNS_T=$(nmcli device show | grep IP4.DNS | awk '{print $NF}' | sed 'N;s/\n/,/')
	GATEWAY_T=$(netstat -rn | grep ${IF_NAME} | grep 'UG[ \t]' | awk '{print $2}')
	LO=$(nmcli dev show lo | grep IP4.ADDRESS | sed 's/\s\s*/\t/g' | sed '2d' | cut -f 2)

#With this cascade of "if" command, the script , in case of null exit from the previous command (and so in case of null variables), print the string "not found", in this way we indicate the failure of the previous calculation. In this way we can see which parameter have been found and which not.	
	
        if [ -n "$IP_PUBLIC_T" ]
	then 
			IP_PUBLIC="$IP_PUBLIC_T"
	else 
			IP_PUBLIC="Not found"
	fi
	
	if [ -n "$DNS_T" ]
		then 
			DNS="$DNS_T"
	else 
			DNS="Not found"
	fi
	
	if [ -n "$GATEWAY_T" ]
		then 
			GATEWAY="$GATEWAY_T"
	else 
			GATEWAY="Not found"
	fi
	
#Now we print the obtained results:
	echo "$PREFIX\n\PRIVATE IP ADDRESS:\n$LO\n\nPUBLIC IP ADDRESS:\n$IP_PUBLIC\n\nDNS: \n$DNS\n\nGATEWAY:\n$GATEWAY\n\n"
        echo "Le informazioni si aggiornano ogni 2 minuti"
	sleep 120
done
- Il file Override.conf (messo nella cartella getty@tty1.service.d):

Codice: Seleziona tutto

[Service]
ExecStart=
ExecStart=-/usr/bin/Custom_issue.sh
StandardInput=tty
StandardOutput=tty
Ultima modifica di matteandroid il sabato 10 luglio 2021, 13:09, modificato 1 volta in totale.
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2842
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Eseguire programma su tty2 Ubuntu 20.04

Messaggio da rai »

Il file Override.conf (messo nella cartella getty@tty1.service.d):
verifica che il nome della cartella sia coerente col terminale che devi usare. Nella 20.04 tty1 é in genere impegnato come default desktop
matteandroid
Prode Principiante
Messaggi: 6
Iscrizione: martedì 6 luglio 2021, 17:40
Sesso: Maschile

Re: Eseguire programma su tty2 Ubuntu 20.04

Messaggio da matteandroid »

Ho provato a metterlo nella cartella (che ho creato io) getty@tty2.service.d, e fa la stessa cosa, non mi arriva alla login dal tty2 (che va bene! è quello che vorrei), ma non mi fa partire lo script. Probabilmente ho scritto qualcosa che lo fa incazzare in Custom_issue.sh...
Avatar utente
giulux
Amministratore
Amministratore
Messaggi: 25422
Iscrizione: domenica 10 gennaio 2010, 12:17
Desktop: ubuntu 18.04
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Sesso: Maschile
Località: Roma

Re: Eseguire programma su tty2 Ubuntu 20.04

Messaggio da giulux »

@matteandroid Inseriti come hai fatto i listati rendono il post troppo lungo e di difficile lettura.
In futuro incollali tra i tag [ code] e [ /code] che si creano cliccando su </> in alto, sopra la finestra di scrittura (editor completo) così:
  • [ code]listato
    da postare
    [ /code]
Correggi il post precedente cliccando sull'icona con matita, poi seleziona il listato, clicca su </> e salva

Ciao
"Non è una segno di buona salute l'essere ben adattato ad una società malata". (Jiddu Krishnarmurti)
matteandroid
Prode Principiante
Messaggi: 6
Iscrizione: martedì 6 luglio 2021, 17:40
Sesso: Maschile

Re: Eseguire programma su tty2 Ubuntu 20.04

Messaggio da matteandroid »

giulux ha scritto:
sabato 10 luglio 2021, 13:03
@matteandroid Inseriti come hai fatto i listati rendono il post troppo lungo e di difficile lettura.
In futuro incollali tra i tag [ code] e [ /code] che si creano cliccando su </> in alto, sopra la finestra di scrittura (editor completo) così:
  • [ code]listato
    da postare
    [ /code]
Correggi il post precedente cliccando sull'icona con matita, poi seleziona il listato, clicca su </> e salva

Ciao
Scusami, mi stavo infatti chiedendo come faceste a farlo all'interno delle caselle :lol:
Grazie della dritta. In ogni caso ho provato a cambiare codice, mettendo un while infinito che stampa una stringa e funziona, quindi suppongo che sia un problema del file sh che ho postato...
Hai qualche idea su cosa possa essere? Alla fine deve solo stampare delle variabili testuali.
matteandroid
Prode Principiante
Messaggi: 6
Iscrizione: martedì 6 luglio 2021, 17:40
Sesso: Maschile

Re: Eseguire programma su tty2 Ubuntu 20.04

Messaggio da matteandroid »

(C'era una spaziatura sbagliata nello script)
Vi scrivo qui una guida per chi fosse interessato ad eseguire script al posto della login (io lo uso su ubuntu 20.04 in modalità testuale)

1) Scrivete il vostro script, nel mio caso voglio che sul tty2 vengano mostrate le informazioni relative a DNS, IP pubblico e privato, Gateway, ho quindi scritto questo script bash:

Codice: Seleziona tutto

#!/bin/sh
PREFIX="NETWORK INFORMATION"
while true
do
	IF_NAME=$(netstat -r 2>/dev/null | grep -m 1 default | awk '{print $8}')
	IP_PUBLIC_T=$(dig +short myip.opendns.com @resolver1.opendns.com)
	DNS_T=$(nmcli device show | grep IP4.DNS | awk '{print $NF}' | sed 'N;s/\n/,/')
	GATEWAY_T=$(netstat -rn | grep ${IF_NAME} | grep 'UG[ \t]' | awk '{print $2}')
	LO=$(nmcli dev show lo | grep IP4.ADDRESS | sed 's/\s\s*/\t/g' | sed '2d' | cut -f 2)
	if [ -n "$IP_PUBLIC_T" ]
	then 
			IP_PUBLIC="$IP_PUBLIC_T"
	else 
			IP_PUBLIC="Not found"
	fi
	
	if [ -n "$DNS_T" ]
		then 
			DNS="$DNS_T"
	else 
			DNS="Not found"
	fi
	
	if [ -n "$GATEWAY_T" ]
		then 
			GATEWAY="$GATEWAY_T"
	else 
			GATEWAY="Not found"
	fi
	echo "$PREFIX\n\PRIVATE IP ADDRESS:\n$LO\n\nPUBLIC IP ADDRESS:\n$IP_PUBLIC\n\nDNS: \n$DNS\n\nGATEWAY:\n$GATEWAY\n\n"
	echo "Network parameters are refreshed every 2 minutes, use another terminal to login."
	sleep 120
	clear
done
2) Loggatevi come root (comando su + password di root) e spostate il vostro script nella cartella /usr/bin

Codice: Seleziona tutto

 cp /cartelladelloscript/nomescript.sh /usr/bin
rendetelo poi eseguibile con il comando:

Codice: Seleziona tutto

chmod +x /usr/bin/nomescript.sh
3) Dirigetevi nella cartella /systemd/system e create la cartella getty@tty2.service.d

Codice: Seleziona tutto

cd /etc/systemd/system; mkdir getty@tty2.service.d
4) Dirigetevi nella cartella appena creata e create il file "override.conf" con il comando

Codice: Seleziona tutto

cd /etc/systemd/system/getty@tty2.service.d; nano override.conf
all'interno di questo file dovrete scrivere il seguente testo:

Codice: Seleziona tutto

[Service]
ExecStart=
ExecStart=-/usr/bin/nomescript.sh
StandardInput=tty
StandardOutput=tty
(ho reso eseguibile anche il file override.conf, ma non sono sicuro che sia necessario)

5) Date quindi i seguenti comandi:

Codice: Seleziona tutto

systemctl daemon-reload; systemctl restart getty@tty2.service
Adesso premendo ctrl-alt-f2 dovreste vedere il vostro script al posto della login, senza toccare minimamente gli altri terminali.

Se notate errori scrivetemi che almeno correggo. Grazie del supporto!
Ultima modifica di matteandroid il domenica 11 luglio 2021, 10:51, modificato 1 volta in totale.
Avatar utente
trekfan1
Moderatore Globale
Moderatore Globale
Messaggi: 23381
Iscrizione: domenica 21 maggio 2006, 10:51
Desktop: Gnome
Distribuzione: Ubuntu 23.10 e 24.04 (dev)
Sesso: Maschile
Località: Formigine (MO) | Accecante Asceta

Re: Eseguire programma su tty2 Ubuntu 20.04

Messaggio da trekfan1 »

Il [Risolto] va messo all'inizio del titolo del PRIMO post cliccando sulla matita ed evitando di scriverlo tutto maiuscolo, grazie :)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti