Configurare Xorg

Richieste di nuove guide, traduzioni, offerte di collaborazione e comunicazioni da parte del gruppo agli utenti.

Moderatore: Gruppo Documentazione

Avatar utente
iononsbalgiomai
Rampante Reduce
Rampante Reduce
Messaggi: 7398
Iscrizione: martedì 29 novembre 2011, 15:50

Re: Configurare Xorg

Messaggio da iononsbalgiomai »

Aggiornamenti:

Per quanto riguarda il percorso in cui viene creato il file xorg.conf.new, ho trovato questo sul wiki di X.org:
X.org wiki ha scritto:The configuration file will be stored in the home directory of the user who started the Xserver (usually /root).
Dunque il file viene sempre creato nella home dell'utente che ha avviato Xserver. Dalle prove fatte risulta che su Ubuntu 20.04 e successivi viene usata la home di root, mentre sulla 18.04 e precedenti la home dell'utente. Per uniformare il comportamento di tutte le versioni basta sostituire il comando

Codice: Seleziona tutto

sudo X -configure
con

Codice: Seleziona tutto

sudo su -c "X -configure"
In questo modo il file viene creato in /root in tutte le versioni di Ubuntu e non è necessario usare locate per trovarlo.

In merito a questo:
wilecoyote ha scritto:
venerdì 30 aprile 2021, 14:39
Quanto all'opzione --priority=high xserver-xorg non è dannosa, si può dare in tutti i casi.
Quel comando dicevo di darlo solo su 20.04 e successive perché il pacchetto xserver-xorg non è presente su 18.04 e precedenti, non perché dannoso.

Ho pensato che la procedura potrebbe essere automatizzata con uno script:

Codice: Seleziona tutto

#!/bin/bash

EXIT_CODE=1
RL="\033[1;31m" # Rosso
GL="\033[1;32m" # Verde
NL="\033[0m"    # Nessun colore

if [ -n "$DISPLAY" ]; then

  echo -e "\nQuesto script deve essere eseguito in una console testuale\n"

else
  
  # Ferma il display manager
  DM="$(basename `cat "/etc/X11/default-display-manager"`)"
  sudo service $DM stop 

  XSESSIONS="$(ps -aux | grep -i "xorg" | grep -iv "grep")"

  if [ -n "$XSESSIONS" ]; then

    echo -e "\nTerminare tutte le sessioni Xorg prima di eseguire questo script\n\n${RL}$XSESSIONS${NL}\n"

  else
    
    # Rimuove un eventuale file generato in precedenze
    sudo rm "/root/xorg.conf.new" &> /dev/null
    
    # Genera il nuovo file di configurazione
    sudo su -c "X -configure"

    if sudo [ ! -f "/root/xorg.conf.new" ]; then

      echo -e "\n${RL}Generazione del file xorg.conf.new fallita${NL}\n"

    else

      echo -e "\n${GL}Generazione del file xorg.conf.new completata con successo${NL}\n"

      # Riconfigura il pacchetto xserver-xorg, se presente
      if [ -n "$(dpkg -l xserver-xorg | grep ii)" ]; then
        sudo dpkg-reconfigure --priority=high xserver-xorg
        if [ $? -eq 0 ]; then
          echo -e "${GL}Riconfigurazione del pacchetto xserver-xorg completata con successo${NL}\n"
        else
          echo -e "${RL}Riconfigurazione del pacchetto xserver-xorg fallita${NL}\n"
        fi
      fi
      
      # Fa il backup del file /etc/X11/xorg.conf, se presente
      APPLICA=true
      if [ -f "/etc/X11/xorg.conf" ]; then      
        sudo mv "/etc/X11/xorg.conf" "/etc/X11/xorg.conf.bak"
        if [ $? -eq 0 ] && [ -f "/etc/X11/xorg.conf.bak" ]; then
          echo -e "Il precedente file xorg.conf è stato rinominato in /etc/X11/xorg.conf.bak\n"
        else
          echo -e "${RL}Non è stato possibile effettuare un backup del precedente file xorg.conf${NL}"
          echo -e "${RL}Il nuovo file di configurazione sovrascriverà il precedente, che non sarà recuperabile${NL}"
          echo -e "${RL}Continuare? (s/n)${NL}"
          END_LOOP=false
          while ! $END_LOOP ; do
            read -sn 1 sn
            case $sn in
              [Ss])
                END_LOOP=true
                ;;
              [Nn])
                END_LOOP=true
                APPLICA=false
                ;;
              *)
                echo -e "Le risposte valide sono \"s\" (sì) o \"n\" (no)"
                ;;
            esac
          done
          echo  # Riga vuota prima del prossimo messaggio
        fi
      fi
      
      # Sposta e rinomina il nuovo file di configurazione in /etc/X11/
      if $APPLICA ; then
        sudo mv "/root/xorg.conf.new" "/etc/X11/xorg.conf"
        if [ $? -eq 0 ] && [ -f "/etc/X11/xorg.conf" ]; then
          echo -e "${GL}Nuovo file di configurazione applicato con successo${NL}\n"
          EXIT_CODE=0
        else
          echo -e "${RL}Applicazione del nuovo file di configurazione fallita${NL}\n"
        fi
      else
        echo -e "Il nuovo file di configurazione non è stato applicato al sistema\n"
      fi

    fi

  fi

  read -sp "Premere INVIO per tornare alla schermata di login"
  echo
  sudo service $DM start # Riavvia il display manager

fi

exit $EXIT_CODE
Non sono affatto un esperto di script bash. Questo l'ho messo insieme facendo ricerche, vedendo esempi, ecc... e l'ho testato su 16.04, 18.04 e 20.04.
Se vogliamo inserirlo nel Wiki, magari come file scaricabile, deve essere prima revisionato da qualcuno competente in materia, magari postandolo nella sezione programmazione.

Edit: Ho corretto un paio di refusi, spero non ce ne siano altri 😅
Ultima modifica di iononsbalgiomai il giovedì 6 maggio 2021, 15:36, modificato 1 volta in totale.
Non aprire una discussione se prima non hai cercato una soluzione nel Wiki né fatto una ricerca nel forum ;)
Avatar utente
wilecoyote
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 15385
Iscrizione: giovedì 20 agosto 2009, 16:21
Desktop: Kubuntu et alii
Distribuzione: 9.04 32bit 14/18/20/22.04 LTS 64bit
Sesso: Maschile
Località: Ceranesi - Ge

Re: Configurare Xorg

Messaggio da wilecoyote »

) Salve,
iononsbalgiomai ha scritto:
giovedì 6 maggio 2021, 12:38
Ho pensato che la procedura potrebbe essere automatizzata con un script:

Codice: Seleziona tutto

#!/bin/bash

EXIT_CODE=1
RL="\033[1;31m" # Rosso
GL="\033[1;32m" # Verde
NL="\033[0m"    # Nessun colore

if [ -n "$DISPLAY" ]; then

  echo -e "\nQuesto script deve essere eseguito in una console testuale\n"

else
  
  # Ferma il display manager
  DM="$(basename `cat "/etc/X11/default-display-manager"`)"
  sudo service $DM stop 

  XSESSIONS="$(ps -aux | grep -i "xorg" | grep -iv "grep")"

  if [ -n "$XSESSIONS" ]; then

    echo -e "\nTerminare tutte le sessioni Xorg prima di eseguire questo script\n\n${RL}$XSESSIONS${NL}\n"

  else
    
    # Rimuove un eventuale file generato in precedenze
    sudo rm "/root/xorg.conf.new" &> /dev/null
    
    # Genera il nuovo file di configurazione
    sudo su -c "X -configure"

    if sudo [ ! -f "/root/xorg.conf.new" ]; then

      echo -e "\n${RL}Generazione del file xorg.conf.new fallita${NL}\n"

    else

      echo -e "\n${GL}Generazione del file xorg.conf.new completata con successo${NL}\n"

      # Riconfigura il pacchetto xserver-xorg, se presente
      if [ -n "$(dpkg -l xserver-xorg | grep ii)" ]; then
        sudo dpkg-reconfigure --priority=high xserver-xorg
        if [ $? -eq 0 ]; then
          echo -e "${GL}Riconfigurazione del pacchetto xserver-xorg completata con successo${NL}\n"
        else
          echo -e "${RL}Riconfigurazione del pacchetto xserver-xorg fallita${NL}\n"
        fi
      fi
      
      # Fa il backup del file /etc/X11/xorg.conf, se presente
      APPLICA=true
      if [ -f "/etc/X11/xorg.conf" ]; then      
        sudo mv "/etc/X11/xorg.conf" "/etc/X11/xorg.conf.bak"
        if [ $? -eq 0 ] && [ -f "/etc/X11/xorg.conf.bak" ]; then
          echo -e "Il precedente file xorg.conf è stato rinominato in /etc/X11/xorg.conf.bak\n"
        else
          echo -e "${RL}Non è stato possibile effettuare un backup del precedente file xorg.conf${NL}"
          echo -e "${RL}Il nuovo file di configurazione sovrascriverà il precedente, che non sarà recuperabile${NL}"
          echo -e "${RL}Continuare? (s/n)${NL}"
          END_LOOP=false
          while ! $END_LOOP ; do
            read -sn 1 sn
            case $sn in
              [Ss])
                END_LOOP=true
                ;;
              [Nn])
                END_LOOP=true
                APPLICA=false
                ;;
              *)
                echo -e "Le risposte valide sono \"s\" (sì) o \"n\" (no)"
                ;;
            esac
          done
          echo  # Riga vuota prima del prossimo messaggio
        fi
      fi
      
      # Sposta e rinomina il nuovo file di configurazione in /etc/X11/
      if $APPLICA ; then
        sudo mv "/root/xorg.conf.new" "/etc/X11/xorg.conf"
        if [ $? -eq 0 ] && [ -f "/etc/X11/xorg.conf" ]; then
          echo -e "${GL}Nuovo file di configurazione applicato con successo${NL}\n"
          EXIT_CODE=0
        else
          echo -e "${RL}Applicazione del nuovo file di configurazione fallita${NL}\n"
        fi
      else
        echo -e "Il nuovo file di configurazione non è stato applicato al sistema\n"
      fi

    fi

  fi

  read -sp "Premere INVIO per tornare alla schermata di login"
  echo
  sudo service $DM start # Riavvia il display manager

fi

exit $EXIT_CODE
Non sono affatto un esperto di script bash. Questo l'ho messo insieme facendo ricerche, vedendo esempi, ecc... e lo testato su 16.04, 18.04 e 20.04.
Se vogliamo inserirlo nel Wiki, magari come file scaricabile, deve essere prima revisionato da qualcuno competente in materia, magari postandolo nella sezione programmazione.

Aspè, provo ad evocare l'utente giusto per fare la verifica.

@UbuNuovo potresti gettare un occhio nello script di @iononsbalgiomai ?

Grazie dell'attenzione.

:: Ciao
ACER Extensa 5230E 2,2 Ghz cpu Celeron 900 hdd 160 GB Ram 1 GB scheda video Intel GM500
ACER Extensa 5635Z 2,2 Ghz cpu Celeron T3100 hdd 320 GB Ram 4 GB scheda video Intel Mobile 4
Quando una Finestra chiusa incontra un Pinguino la Finestra chiusa è una Finestra aperta.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4445
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Configurare Xorg

Messaggio da UbuNuovo »

Io ho Ubuntu Mate 20.04.2 LTS, D.M.:lightdm, W.M.:Metacity (Marco)
Ho le tty da F1 a F6 e ritorno alla sessione grafica con F7
xorg.conf.new è nella home utente

Per quanto riguarda lo script, alcuni consigli:

Codice: Seleziona tutto

XSESSIONS="$(ps -aux | grep -i "xorg" | grep -iv "grep")"
si può abbreviare, senza ripetere il grep

Codice: Seleziona tutto

XSESSIONS="$(ps -aux | grep -i 'xor[g]')"
Converrebbe usare sempre la stessa sintassi per la sostituzione di comando, da preferire $(COMANDO) rispetto a `COMANDO`, si riconosce più facilmente ed è annidabile.
Meglio usare il quoting forte 'testo' quando il testo non contiene variabili da espandere o apici singoli.

Ma soprattutto... mamma mia quanti annidamenti di if..else, da diventarci matti! L'else non è obbligatorio!
Immagino che a scrivere questo script tu ci abbia fatto una sudata. :)
Conviene chiudere gli if quando un'operazione necessaria fallisce, si mette exit e si continua il codice per la condizione "buona".
Il codice diventa infinitamente più facile da leggere e scrivere.
Per esempio, nel caso di:

Codice: Seleziona tutto

if [ -n "$DISPLAY" ]; then
		echo -e "\nQuesto script deve essere eseguito in una console testuale\n"
	else
		# Ferma il display manager
		DM="$(basename `cat "/etc/X11/default-display-manager"`)"
		...
conviene usare:

Codice: Seleziona tutto

if [ -n "$scelta" ]; then
	echo -e "\nQuesto script deve essere eseguito in una console testuale\n"
	exit
fi
DM="$(basename `cat "/etc/X11/default-display-manager"`)"
...
Lo stesso discorso vale anche per gli altri fallimenti, tipo: "Riconfigurazione fallita"
e anche nel caso di mancata riuscita della creazione del file xorg.conf.bak,
se non funziona il comando mv, da che dipende? Non si può scrivere in quella directory? Il file system è corrotto? ...
Se il primo mv non funziona, non funzionerà neanche il secondo, (quello che dovrebbe sovrascrivere /etc/X11/xorg.conf).
A questo punto metti un exit e puoi eliminare il ciclo while con lo switch case.
Comunque, per la verifica del si/no basta verificare un solo caso, per esempio:

Codice: Seleziona tutto

echo 'sceta: (s/n)'
read -n1 scelta
if [[ $scelta == [Ss] ]];then echo 'Hai scelto "si"';else echo 'Non hai scelto "si"';fi
o

Codice: Seleziona tutto

if [[ $scelta =~ ^[Ss]$ ]]; then ...
o in negativo

Codice: Seleziona tutto

if [[ ! $scelta =~ ^[Ss]$ ]]; then ...
naturalmente puoi basarti su [Nn] invece che su [Ss]
opure, per shell meno avanzate, di bash:

Codice: Seleziona tutto

if [ "$scelta" = "S" -o "$scelta" = "s" ]; then ...
Per conto mio, per uno script interattivo non vale la pena occuparsi dei codici di uscita, ci sono già i messaggi d'errore.
Ciaux
Salva l'Ucraina! 🇺🇦
Avatar utente
wilecoyote
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 15385
Iscrizione: giovedì 20 agosto 2009, 16:21
Desktop: Kubuntu et alii
Distribuzione: 9.04 32bit 14/18/20/22.04 LTS 64bit
Sesso: Maschile
Località: Ceranesi - Ge

Re: Configurare Xorg

Messaggio da wilecoyote »

) Salve,
UbuNuovo ha scritto:
venerdì 7 maggio 2021, 0:07
Io ho Ubuntu Mate 20.04.2 LTS, D.M.:lightdm, W.M.:Metacity (Marco)
Ho le tty da F1 a F6 e ritorno alla sessione grafica con F7
xorg.conf.new è nella home utente

Bel colpo, questo spariglia le carte su 2 punti che sembravano assodati, le combinazioni di tasti per accedere alle tty e dove si crea il xorg.conf.new.

Ed il bello è che il lightdm l'uso nel mio Lubuntu Focal 20.04.2 LTS che ho usato per le prove… :sisi:

Per lo script forse a @iononsbalgiomai gli occorre più l'aiuto a scriverlo piuttosto che correggerlo.

:: Ciao
ACER Extensa 5230E 2,2 Ghz cpu Celeron 900 hdd 160 GB Ram 1 GB scheda video Intel GM500
ACER Extensa 5635Z 2,2 Ghz cpu Celeron T3100 hdd 320 GB Ram 4 GB scheda video Intel Mobile 4
Quando una Finestra chiusa incontra un Pinguino la Finestra chiusa è una Finestra aperta.
Avatar utente
iononsbalgiomai
Rampante Reduce
Rampante Reduce
Messaggi: 7398
Iscrizione: martedì 29 novembre 2011, 15:50

Re: Configurare Xorg

Messaggio da iononsbalgiomai »

In realtà lo script già funziona. Serviva appunto che lo vedesse qualcuno di esperto per escludere errori madornali, che in determinate circostanze ne possano compromettere il funzionamento, e in generale per ottimizzare il codice.

Per accedere alla tty, F3 dovrebbe funzionare su tutte le distro. Per tornare alla sessione grafica, quando si riavvia il display manager compare automaticamente la schermata di login, quindi non bisogna premere nulla. Tutt'al più sulla guida si può scrivere:
Se non compare automaticamente la schermata di login premere Ctrl + Alt + F1 oppure Ctrl + Alt + F7.
Direi dunque che il problema dei tasti Ctrl + Alt + Fn è superato.

Per quanto riguarda la posizione del file xorg.conf.new, come dicevo sopra, ci sono differenze fra le varie distro se viene creato col comando sudo X -configure. Tuttavia col comando sudo su -c "X -configure" dovrebbe essere creato sempre in /root, a prescindere dalla distro. Fate qualche prova e fatemi sapere in caso.

Venendo allo script, innanzitutto grazie @UbuNuovo :)
Ci sono alcune cose che vorrei mi chiarissi, in breve. Se la spiegazione è lunga fa niente, non andiamo O.T.:
  • La modifica di grep ho visto che funziona, ma non ho capito come 😅, benché abbia dato un'occhiata al man.
  • Ho usato dappertutto le quadre singole [...], che ho letto equivalgono al comando test. Tuttavia non ho capito in quali casi è meglio usare le quadre doppie [[...]].
  • Idem per virgolette singole e doppie.
Per quanto riguarda le if annidate, in generale anch'io preferisco di gran lunga chiuderle subito (programmo in C# e VB.NET). Tuttavia in questo script, tolta la prima if, dopo ogni altro fallimento è necessario riavviare il display manager (l'ultima operazione dello script).
Avevo dunque tre opzioni:
  • ripetere a ogni fallimento questo pezzo di codice:

    Codice: Seleziona tutto

    read -sp "Premere INVIO per tornare alla schermata di login"
    echo
    sudo service $DM start # Riavvia il display manager
    Ciò avrebbe creato molta ridondanza, pertanto ho escluso a priori quest'opzione.
  • Usare un GoTo che portasse direttamente alla fine dello script. Tuttavia so che il GoTo è sconsigliato un po' per tutti i linguaggi, perciò ho escluso anche questa opzione. D'altra parte l'ho notata in diversi script bash.
  • Usare le if annidate, come poi ho fatto.
Dici sia meglio optare per il GoTo per saltare direttamente alla fine? Oppure hai un'altra opzione da consigliarmi?

Quanto al Continuare? (s/n), effettivamente è superfluo, perché se non riesce a leggere\scrivere in /etc/X11 per creare il backup, non potrà nemmeno trasferirvi il nuovo file di configurazione, quindi è inutile anche tentare di continuare.

Parlando però in generale delle domande all'utente, se si verifica una solo risposta, ad esempio "s", non è più un (s/n) ma un (s/any). Dato che quando ti compare la tipica domanda (continue/ignore/abort) devi necessariamente scegliere una delle risposte indicate, altrimenti ti viene riproposta la stessa domanda, ho pensato di usare lo stesso approccio. Anche perché se verifichi solo la "s" e l'utente digita "y", lo script lo prende per un no, quando è ovvio che l'utente intendeva "yes". Il problema si pone meno verificando la "n" ma il principio è lo stesso.
Non aprire una discussione se prima non hai cercato una soluzione nel Wiki né fatto una ricerca nel forum ;)
Avatar utente
wilecoyote
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 15385
Iscrizione: giovedì 20 agosto 2009, 16:21
Desktop: Kubuntu et alii
Distribuzione: 9.04 32bit 14/18/20/22.04 LTS 64bit
Sesso: Maschile
Località: Ceranesi - Ge

Re: Configurare Xorg

Messaggio da wilecoyote »

) Salve, pel sudo su -c "X -configure" posso confermare che funziona, però non ho Mate o Xfce in uso.

:: Ciao
ACER Extensa 5230E 2,2 Ghz cpu Celeron 900 hdd 160 GB Ram 1 GB scheda video Intel GM500
ACER Extensa 5635Z 2,2 Ghz cpu Celeron T3100 hdd 320 GB Ram 4 GB scheda video Intel Mobile 4
Quando una Finestra chiusa incontra un Pinguino la Finestra chiusa è una Finestra aperta.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4445
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Configurare Xorg

Messaggio da UbuNuovo »

@iononsbalgiomai
Per quanto riguarda il trucchetto per eliminare un grep da ps -aux | grep -i "xorg" | grep -iv "grep" e la spiegazione delle classi di caratteri [], guarda qua https://www.regular-expressions.info/charclass.html
infatti non si tratta di un test ma di caratteri che hanno un significato speciale per le regex.

In pratica, inserire una lettera della regex in una classe di caratteri, non ne cambia il significato, quindi grep filtrerà allo stesso modo.
La differenza è che nell'output di ps riguardante grep, apparirà una stringa contenente ...xor[g]... che non soddisfa la regex 'xor[g]', la stringa che la soddisfa è 'xorg', senza parentesi, non 'xor[g]'.

test con le parentesi quadrate doppie, è una possibilità offerta da Bash, in altre shell non funziona.
Permette varie facilitazioni, come la non obbligatorietà dei doppi apici per le variabili contenenti stringhe, la possibilità di fare confronti usando la simbologia classica (<=, !=, ==, =~ etc.) ed altro... guarda man bash

Per quanto riguarda apici singoli e doppi: è un'abitudine che ho preso da PHP; il parser del codice, impiega più tempo ad elaborare le stringhe tra doppi apici perché deve controllare se esistono eventuali caratteri speciali come per esempio il dollaro che indica una variabile etc..
Se il parser trova una stringa tra apici singoli sa già che i caratteri interni non avranno significati speciali e la tratta direttamente come stringa.
Probabilmente questo processo non avviene con Bash; nel dubbio preferisco usare la regola che ti ho consigliato, in quanto non crea problemi o limitazioni; anzi può risultare utile per distinguere a colpo d'occhio stringhe di solo testo da quelle con variabili o apici.
Tra le regole che seguo c'è anche quella di non usare nomi maiuscoli per le variabili, le maiuscole sono usate nelle variabili d'ambiente; in questo modo posso individuare al volo il tipo di variabile. Tutto questo non è obbligatorio ma non costa niente usare certe precauzioni.
dopo ogni altro fallimento è necessario riavviare il display manager
È vero! Avevo perso il filo con tutti quegli annidamenti.
Il GoTo non esiste in Bash.
Nei casi in cui si debba ripetere un codice più volte, conviene usare una funzione.
Una pagina a caso: https://www.aquilante.net/bash/cap5_funzioni.shtml
da ABS: http://www.pluto.it/files/ildp/guide/abs/functions.html
quindi, dopo ogni fallimento che richiede l'uscita, richiami la funzione e poi esci.

Codice: Seleziona tutto

if [ -n "$scelta" ]; then
	echo -e "\nQuesto script deve essere eseguito in una console testuale\n"
	NOME_DELLA_FUNZIONE
	exit
fi
DM="$(basename `cat "/etc/X11/default-display-manager"`)"
...
Salva l'Ucraina! 🇺🇦
Avatar utente
iononsbalgiomai
Rampante Reduce
Rampante Reduce
Messaggi: 7398
Iscrizione: martedì 29 novembre 2011, 15:50

Re: Configurare Xorg

Messaggio da iononsbalgiomai »

Grazie mille per le indicazioni che mi hai dato, solo un'altra cosa: leggevo in giro (ad esempio qui) che è preferibile usare printf al posto di echo. Dici che in questo script sia meglio optare per printf?
Non aprire una discussione se prima non hai cercato una soluzione nel Wiki né fatto una ricerca nel forum ;)
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4445
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Configurare Xorg

Messaggio da UbuNuovo »

Per stampare semplici stringhe mi sembra più pratico echo. printf si comporta come echo -n quindi se vuoi andare a capo devi usare \n, per la compatibilità non dovrebbero esserci problemi, visto che lo script inizia con #!/bin/bash quindi viene usato echo di Bash.
Dipende dalle tue preferenze/abitudini, printf esiste in moltissimi linguaggi ed ha parecchie funzionalità, se sei abituato ad usarlo continua con printf.

P.S. Mi ero dimenticato... per la verifica si|no, nella classe di caratteri ci puoi mettere quello che vuoi, per esempio [SsYy], per verifiche di altri caratteri, puoi usare elif ... .
Io di solito formulo la richiesta in modo simile a: 'Premere il tasto "S" per continuare; "Invio" o altro tasto per uscire.'
Salva l'Ucraina! 🇺🇦
Avatar utente
iononsbalgiomai
Rampante Reduce
Rampante Reduce
Messaggi: 7398
Iscrizione: martedì 29 novembre 2011, 15:50

Re: Configurare Xorg

Messaggio da iononsbalgiomai »

Ok, ho corretto lo script seguendo le tue preziose indicazioni, spero di non aver tralasciato nulla:

Codice: Seleziona tutto

#!/bin/bash

rl="\033[1;31m" # Rosso
gl="\033[1;32m" # Verde
nl="\033[0m"    # Nessun colore

# Funzione che riavvia il display manager
function riavvia_dm {
  read -sp 'Premere INVIO per tornare alla schermata di login'
  echo
  sudo service $dm start # Riavvia il display manager
}

# Verifica che lo script non venga eseguito in una sessione grafica
if [ -n "$DISPLAY" ]; then
  echo -e '\nQuesto script deve essere eseguito in una console testuale\n'
  exit  
fi
  
# Ferma il display manager
dm="$(basename "$(cat '/etc/X11/default-display-manager')")"
sudo service $dm stop

# Verifica che non ci siano sessione Xorg attive
xsessions="$(ps -aux | grep -i 'xor[g]')"
if [ -n "$xsessions" ]; then
  echo -e "\nTerminare tutte le sessioni Xorg prima di eseguire questo script\n\n${rl}$xsessions${nl}\n"
  riavvia_dm
  exit
fi
    
# Rimuove un eventuale file generato in precedenze
sudo rm '/root/xorg.conf.new' &> /dev/null

# Genera il nuovo file di configurazione
sudo su -c 'X -configure'

# Verifica che il nuovo file di configurazione sia stato generato nel percorso previsto
if sudo [ -f '/root/xorg.conf.new' ]; then
  echo -e "\n${gl}Generazione del file xorg.conf.new completata con successo${nl}\n"
else
  echo -e "\n${rl}Generazione del file xorg.conf.new fallita${nl}\n"
  riavvia_dm
  exit
fi

# Riconfigura il pacchetto xserver-xorg, se presente
if [ -n "$(dpkg -l xserver-xorg | grep ii)" ]; then
  sudo dpkg-reconfigure --priority=high xserver-xorg
  if [ $? -eq 0 ]; then
    echo -e "${gl}Riconfigurazione del pacchetto xserver-xorg completata con successo${nl}\n"
  else
    echo -e "${rl}Riconfigurazione del pacchetto xserver-xorg fallita${nl}\n" # Non è un errore fatale
  fi
fi

# Fa il backup del file /etc/X11/xorg.conf, se presente
if [ -f '/etc/X11/xorg.conf' ]; then      
  sudo mv '/etc/X11/xorg.conf' '/etc/X11/xorg.conf.bak'
  if [ $? -eq 0 ] && [ -f '/etc/X11/xorg.conf.bak' ]; then
    echo -e 'Il precedente file xorg.conf è stato rinominato in /etc/X11/xorg.conf.bak\n'
  else
    echo -e "${rl}Non è stato possibile effettuare un backup del precedente file xorg.conf${nl}"
    echo -e "${rl}Il nuovo file di configurazione non verrà applicato al sistema${nl}\n"
    riavvia_dm
    exit
  fi
fi

# Sposta e rinomina il nuovo file di configurazione in /etc/X11/
sudo mv '/root/xorg.conf.new' '/etc/X11/xorg.conf'
if [ $? -eq 0 ] && [ -f '/etc/X11/xorg.conf' ]; then
  echo -e "${gl}Nuovo file di configurazione applicato con successo${nl}\n"
else
  echo -e "${rl}Applicazione del nuovo file di configurazione fallita${nl}\n"
fi

# Riavvia il desktop manager
riavvia_dm
Dagli un'altra occhiata se possibile :)
Naturalmente se credi che si possa scrivere uno script migliore, fai pure. L'importante è che alla fine nel wiki venga pubblicato uno script scritto come si deve.
Non aprire una discussione se prima non hai cercato una soluzione nel Wiki né fatto una ricerca nel forum ;)
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4445
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Configurare Xorg

Messaggio da UbuNuovo »

Ora si che prima no! :birra:
Non ti pare più semplice da leggere, comprendere e modificare? :sisi:
Salva l'Ucraina! 🇺🇦
Avatar utente
wilecoyote
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 15385
Iscrizione: giovedì 20 agosto 2009, 16:21
Desktop: Kubuntu et alii
Distribuzione: 9.04 32bit 14/18/20/22.04 LTS 64bit
Sesso: Maschile
Località: Ceranesi - Ge

Re: Configurare Xorg

Messaggio da wilecoyote »

) Salve, per quel pochissimo che ne so di script, lo trovo più scorrevole da seguire nei vari passaggi.

Aggiungo ottima l'indicazione di cosa fanno i vari stadi, spesso manca ed è un delirio cercare l'errore.

:: Ciao
ACER Extensa 5230E 2,2 Ghz cpu Celeron 900 hdd 160 GB Ram 1 GB scheda video Intel GM500
ACER Extensa 5635Z 2,2 Ghz cpu Celeron T3100 hdd 320 GB Ram 4 GB scheda video Intel Mobile 4
Quando una Finestra chiusa incontra un Pinguino la Finestra chiusa è una Finestra aperta.
Avatar utente
iononsbalgiomai
Rampante Reduce
Rampante Reduce
Messaggi: 7398
Iscrizione: martedì 29 novembre 2011, 15:50

Re: Configurare Xorg

Messaggio da iononsbalgiomai »

UbuNuovo ha scritto:
domenica 9 maggio 2021, 23:16
Ora si che prima no! :birra:
Non ti pare più semplice da leggere, comprendere e modificare? :sisi:
Certamente :)
Grazie alla funzione ho potuto rimuovere tutti le if annidate, quindi è più semplice da leggere. Grazie mille per il tuo prezioso aiuto.
wilecoyote ha scritto:
lunedì 10 maggio 2021, 11:36
) Salve, per quel pochissimo che ne so di script, lo trovo più scorrevole da seguire nei vari passaggi.

Aggiungo ottima l'indicazione di cosa fanno i vari stadi, spesso manca ed è un delirio cercare l'errore.

:: Ciao
Ora c'è un altro inghippo da risolvere :faint:
Sul mio notebook ho notato che il file generato da X -config non funziona, è inefficace, perché alla voce "driver" scrive "intel". Perché funzioni devo correggerlo manualmente in "i915".
Non aprire una discussione se prima non hai cercato una soluzione nel Wiki né fatto una ricerca nel forum ;)
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4445
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Configurare Xorg

Messaggio da UbuNuovo »

Se xorg non riesce a farsi la configurazione la vedo dura.
Salva l'Ucraina! 🇺🇦
Avatar utente
iononsbalgiomai
Rampante Reduce
Rampante Reduce
Messaggi: 7398
Iscrizione: martedì 29 novembre 2011, 15:50

Re: Configurare Xorg

Messaggio da iononsbalgiomai »

Nel caso dovremmo scrivere nel wiki che bisogna verificare che il nome del driver nel file xorg.conf corrisponda a quello di lshw -c display | grep driver.
Vorrei però approfondire in che modo X -configure ricava i dati per risalire al motivo dell'incongruenza. Il wiki di Xorg dice solo:
X.org wiki ha scritto:As root just run: X -configure. The Xserver will then load each driver module, probe for the driver and create a configuration file.
Non aprire una discussione se prima non hai cercato una soluzione nel Wiki né fatto una ricerca nel forum ;)
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4445
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Configurare Xorg

Messaggio da UbuNuovo »

Non ho mai approfondito la configurazione di Xorg, mi sono sempre trovato bene con la configurazione automatica.
Nel mio caso ottengo

Codice: Seleziona tutto

8-) lshw -c display | grep driver
       configuration: driver=i915 latency=0
       configuration: driver=nvidia latency=0
Dovrei mettere il driver nvidia?
Salva l'Ucraina! 🇺🇦
Avatar utente
iononsbalgiomai
Rampante Reduce
Rampante Reduce
Messaggi: 7398
Iscrizione: martedì 29 novembre 2011, 15:50

Re: Configurare Xorg

Messaggio da iononsbalgiomai »

Ah, hai doppia scheda, non saprei. Cos'è scritto nel file xorg.conf sezione "Device" voce "Driver"? Per caso hai due sezioni "Device"?

P.S.: mi sono accorto che non funzionava perché inserendo una riga modeline, per impostare una risoluzione custom, non andava. Risolto correggendo il nome del driver.
Non aprire una discussione se prima non hai cercato una soluzione nel Wiki né fatto una ricerca nel forum ;)
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4445
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Configurare Xorg

Messaggio da UbuNuovo »

Non ho il file xorg.conf ho le impostazioni in /usr/share/X11/xorg.conf.d
incredibile! :muro:
Ho guardato il file ~/xorg.conf.new

Codice: Seleziona tutto

...
	Identifier  "Card0"
	Driver      "radeon"
	BusID       "PCI:1:5:0"
Rsdeon???
Salva l'Ucraina! 🇺🇦
Avatar utente
iononsbalgiomai
Rampante Reduce
Rampante Reduce
Messaggi: 7398
Iscrizione: martedì 29 novembre 2011, 15:50

Re: Configurare Xorg

Messaggio da iononsbalgiomai »

Ahah fantastico :lol:
Questo è un bel problema perché se non becca nemmeno il vendor della scheda video, le opzioni presenti nella sezione "Device" (commentate di default) potrebbero essere non adatte all'hardware. Che succede se correggi il nome del driver e attivi qualche opzione, magari non supportata dalla scheda? Meglio non provare...
Non aprire una discussione se prima non hai cercato una soluzione nel Wiki né fatto una ricerca nel forum ;)
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4445
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Configurare Xorg

Messaggio da UbuNuovo »

Sì, non tocco niente, meglio non rischiare.
Salva l'Ucraina! 🇺🇦
Scrivi risposta

Ritorna a “Gruppo Documentazione”

Chi c’è in linea

Visualizzano questa sezione: jeremie2 e 13 ospiti