{"id":1386,"date":"2013-05-08T10:53:39","date_gmt":"2013-05-08T08:53:39","guid":{"rendered":"http:\/\/blog.sfsoft.it\/?p=1386"},"modified":"2013-05-08T10:57:12","modified_gmt":"2013-05-08T08:57:12","slug":"personalizzare-e-rendere-informativo-il-logon-di-un-ubuntu-server","status":"publish","type":"post","link":"http:\/\/www.sfsoft.it\/blog\/2013\/05\/08\/personalizzare-e-rendere-informativo-il-logon-di-un-ubuntu-server\/","title":{"rendered":"Personalizzare e rendere informativo il logon di un Ubuntu Server"},"content":{"rendered":"<p>Prendiamo per esempio una situazione, avete creato una macchina virtuale che ospita un determinato servizio di rete, per renderla disponibile anche ad altri terminali \u00e8 stata impostata come rete <em>bridged<\/em> in maniera che abbia una classe IP uguale a tutti, un IP statico in questo caso \u00e8 sconsigliato in quanto potrebbe essere accesa in diversi uffici quindi con classi IP quasi sicuramente diverse.<\/p>\n<p>Appoggiandosi per\u00f2 ad un <em>server DHCP<\/em> diverso di volta in volta per sapere che indirizzo IP viene assegnato dobbiamo eseguire il <em>login<\/em>.<\/p>\n<p>Esiste la possibilit\u00e0 invece di personalizzare la schermata di <em>login<\/em>, per intenderci quella che si presenta alla richiesta dell&#8217;<em>utente\/password<\/em>, inserendo determinate informazioni, ad esempio l&#8217;indirizzo IP ottenuto.<\/p>\n<p>Per fare questo occorre modificare due file distinti, <em>\/etc\/issue<\/em> per gli accessi da terminale locale e <em>\/etc\/issue.net<\/em> per gli accessi remoti.<\/p>\n<p>Nel nostro caso ci concentriamo solo su quello per gli accessi locali.<\/p>\n<p>Creiamo ad esempio uno <em>script<\/em> che si occupi di ottenere l&#8217;indirizzo IP e scriverlo nel file <em>\/etc \/issue<\/em>:<\/p>\n<pre lang=\"bash\">sudo nano \/root\/customize-issue<\/pre>\n<p>E inseriamo queste righe:<\/p>\n<pre lang=\"bash\">#!\/bin\/bash\r\n\r\n# otteniamo l'IP locale\r\nip_lan=`ifconfig eth0 2&gt; \/dev\/null | grep \"inet addr\" | awk '{ print $2 }' | awk -F: '{ print $2 }'`\r\n\r\n# puliamo il file\r\necho \"\" &gt; \/etc\/issue\r\n\r\n# Aggiungiamo le nostre informazioni\r\necho \"L'indirizzo IP \u00e8: $ip_lan\" &gt;&gt; \/etc\/issue<\/pre>\n<p>Aggiungiamo l&#8217;esecuzione del nostro script nel file <em>\/etc\/rc.local<\/em> e riavviamo, vedremo alla richiesta di <em>login<\/em> l&#8217;informativa dell&#8217;indirizzo IP locale assegnato dal <em>server DHCP<\/em>.<\/p>\n<p>Nel caso che questa macchina virtuale abbia un altra funzione che non sempre possa risultare attiva possiamo rendere lo schermo di <em>login<\/em> dinamico in maniera che venga aggiornato di volta in volta quando una determinata condizione si presenta.<\/p>\n<p>Mettiamo il caso che questa macchina virtuale debba collegarsi ad una <em>VPN<\/em> esterna e vogliamo indicare lo stato di connessione e magari anche il suo indirizzo IP quando collegato, quindi modifichiamo lo script di aggiornamento:<\/p>\n<pre lang=\"bash\">#!\/bin\/bash\r\n\r\n# otteniamo l'IP locale\r\nip_lan=`ifconfig eth0 2&gt; \/dev\/null | grep \"inet addr\" | awk '{ print $2 }' | awk -F: '{ print $2 }'`\r\n\r\n# otteniamo l'IP della VPN\r\nip_vpn=`ifconfig tun0 2&gt; \/dev\/null | grep \"inet addr\" | awk '{ print $2 }' | awk -F: '{ print $2 }'`\r\n\r\n# puliamo il file\r\necho \"\" &gt; \/etc\/issue\r\n\r\n# Aggiungiamo le nostre informazioni\r\necho \"L'indirizzo IP \u00e8: $ip_lan\" &gt;&gt; \/etc\/issue\r\n\r\n# Aggiungiamo l'informativa che varia in base allo stato della VPN\r\nif [ \"$ip_vpn\" ]; then\r\n  echo \"+++++ VPN attiva +++++: IP $ip_vpn\" &gt;&gt; \/etc\/issue\r\nelse\r\n  echo \"----- VPN inattiva -----\" &gt;&gt; \/etc\/issue\r\nfi<\/pre>\n<p>A questo punto il primo problema che serve affrontare \u00e8 che la schermata di <em>login<\/em> \u00e8 basata su un file di testo e quindi \u00e8 statica, di conseguenza anche cambiando il file <em>\/etc\/issue<\/em> l&#8217;informativa non viene aggiornata fino a che l&#8217;utente non aggiorna il terminale.<\/p>\n<p>Per ovviare a questo problema ed essendo la macchina virtuale un servizio a cui appoggiarsi e che quindi non richiede un <em>login<\/em> da terminale di un utente \u00e8 possibile dopo aver modificato il file richiedere un caricamento della schermata uccidendo il processo che tiene attivo il terminale locale in maniera che venga forzato ad essere riaperto, creiamo quindi un altro <em>script<\/em> che venga eseguito al <em>boot<\/em> e resti in esecuzione controllando sempre lo stato della connessione e nel caso ci sia una variazione aggiorni la nostra schermata di <em>login<\/em>:<\/p>\n<pre lang=\"bash\">sudo nano \/root\/check-vpn-state<\/pre>\n<p>E scriviamo una cosa del genere:<\/p>\n<pre lang=\"bash\">#!\/bin\/bash\r\n\r\nip_vpn=\"\"\r\nip_vpn_last=\"\"\r\n\r\nwhile [ true ]\r\ndo\r\n\r\n  # Ottiene l'IP assegnato dalla VPN se presente\r\n  ip_vpn=`ifconfig tun0 2&gt; \/dev\/null | grep \"inet addr\" | awk '{ print $2 }' | awk -F: '{ print $2 }'`\r\n\r\n  # Controlla lo stato della connessione\r\n  if [ \"$ip_vpn\" != \"$ip_vpn_last\" ]\r\n  then\r\n\r\n    # Memorizza lo stato attuale\r\n    ip_vpn_last=\"$ip_vpn\"\r\n\r\n    # Aggiorna l'informativa\r\n    \/root\/customize-issue\r\n\r\n    # Forza il riavvio del terminale locale\r\n    kill $(ps aux | grep tty1 | awk '{ print $2 }' | head -1)\r\n\r\n  fi\r\n\r\n  # Aspetta 5 secondi prima di controllare nuovamente lo stato della connessione\r\n  sleep 5\r\ndone<\/pre>\n<p>Si edita quindi il file <em>\/etc\/rc.local<\/em> e si aggiunge l&#8217;avvio anche di questo <em>script<\/em> in maniera che venga eseguito in background:<\/p>\n<pre lang=\"bash\"># Aggiorna la prima schermata\r\n\/root\/customize-issue\r\n\r\n# Resta in attesa e aggiorna di volta al cambio dello stato della connessione VPN\r\n\/root\/check-vpn-state &amp;<\/pre>\n<p>Si riavvia e si controlla il risultato, subito si avr\u00e0 il messaggio che la <em>VPN<\/em> \u00e8 inattiva, poi dopo le inizializzazioni del servizio e quando si sar\u00e0 stabilit\u00e0 la connessione vedremo l&#8217;informativa cambiare.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Prendiamo per esempio una situazione, avete creato una macchina virtuale che ospita un determinato servizio di rete, per renderla disponibile anche ad altri terminali \u00e8 stata impostata come rete bridged in maniera che abbia una classe IP uguale a tutti, un IP statico in questo caso \u00e8 sconsigliato in quanto potrebbe essere accesa in diversi [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[15,3,23],"tags":[16,8,5],"_links":{"self":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/1386"}],"collection":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/comments?post=1386"}],"version-history":[{"count":3,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/1386\/revisions"}],"predecessor-version":[{"id":1389,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/1386\/revisions\/1389"}],"wp:attachment":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/media?parent=1386"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/categories?post=1386"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/tags?post=1386"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}