UFFICIALE L'OT di Linux e altri OS

Pubblicità
per curiosità, mi posti l' output di xrandr perché a me non lo da la doppia (normal, right etcetc).
xrandr con schermo orientato 'normal':
Codice:
xrandr
Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 260mm x 140mm
   1920x1080     60.00*+
   1400x1050     59.98  
   1600x900      60.00  
   1280x1024     60.02  
   1280x960      60.00  
   1368x768      60.00  
   1280x720      60.00  
   1024x768      60.00  
   1024x576      60.00  
   960x540       60.00  
   800x600       60.32    56.25  
   864x486       60.00  
   640x480       59.94  
   720x405       60.00  
   640x360       60.00  
HDMI1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
xrandr con schermo ruotato a sinistra:
Codice:
xrandr
Screen 0: minimum 8 x 8, current 1080 x 1920, maximum 32767 x 32767
eDP1 connected primary 1080x1920+0+0 left (normal left inverted right x axis y axis) 260mm x 140mm
   1920x1080     60.00*+
   1400x1050     59.98  
   1600x900      60.00  
   1280x1024     60.02  
   1280x960      60.00  
   1368x768      60.00  
   1280x720      60.00  
   1024x768      60.00  
   1024x576      60.00  
   960x540       60.00  
   800x600       60.32    56.25  
   864x486       60.00  
   640x480       59.94  
   720x405       60.00  
   640x360       60.00  
HDMI1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
 
Capito.
Quindi ti da la modalità nel momento in cui non è normal. La riga di riferimento è la seconda, il monitor è eDP1 e se non è left inverted oppure right, è normal.
Ma se ci colleghi anche uno schermo HDMI1, lo script salta?
 
Capito.
Quindi ti da la modalità nel momento in cui non è normal. La riga di riferimento è la seconda, il monitor è eDP1 e se non è left inverted oppure right, è normal.
Ma se ci colleghi anche uno schermo HDMI1, lo script salta?
eh sì, perchè nella prima riga
Codice:
echo $(xrandr |grep "eDP1") > rotate_cache.txt
devi sostituire il monitor che usi (nel tuo caso HDMI1); infatti è uno script non molto 'smart' dato che chi l'ha scritto non è molto 'smart' in bash..:P

a proposito lo script funziona alla grande
Codice:
#!/bin/bash

echo $(xrandr |grep "eDP1") > rotate_cache.txt
if [ $(grep -c left rotate_cache.txt) = "2" ]
then
 xrandr -o inverted && xinput set-prop "SYNA2B23:00 06CB:2714" --type=float "Coordinate Transformation Matrix" -1 0 1 0 -1 1 0 0 1
 notify-send --icon computer 'Rotazione schermo' "Orientamento = INVERTITO"
else
 if [ $(grep -c right rotate_cache.txt) = "2" ]
 then
  xrandr -o normal && xinput set-prop "SYNA2B23:00 06CB:2714" --type=float "Coordinate Transformation Matrix" 0 0 0 0 0 0 0 0 0
  notify-send --icon computer 'Rotazione schermo' "Orientamento = NORMALE"
 else
  if [ $(grep -c inverted rotate_cache.txt) = "2" ]
  then
   xrandr -o right && xinput set-prop "SYNA2B23:00 06CB:2714" --type=float "Coordinate Transformation Matrix" 0 1 0 -1 0 1 0 0 1
   notify-send --icon computer 'Rotazione schermo' "Orientamento = DESTRO"
   echo "rotazione-inverted"
  else
   xrandr -o left && xinput set-prop "SYNA2B23:00 06CB:2714" --type=float "Coordinate Transformation Matrix" 0 -1 1 1 0 0 0 0 1
   notify-send --icon computer 'Rotazione schermo' "Orientamento = SINISTRO"
   echo "rotazione-normal"
  fi
 fi
fi
rm ~/rotate_cache.txt
il problema è che il comando
Codice:
grep -c left rotate_cache.txt
non mi restituisce '2' quando in rotate_cache.txt c'è effettivamente 2 volte la parola left. ho provato anche a mettere la parola da conteggiare tra doppi apici ma mi restituisce sempre '1': suggerimenti?

Edit: il comando 'grep -c parola file.txt' conta correttamente il numero di volte che il file.txt contiene la parola solo se la parola da cercare è su righe diverse: sulla stessa riga viene conteggiata 1 sola volta.
 
Ultima modifica:
Perché giustamente grep riporta le linee che contiene l' occorrenza e wc conta le linee dall' output di grep.
Una riceca veloce mi ha dato questo risultato che secondo me lo potresti prendere come esempio:
Codice:
##INVOCAZIONE: ./script.sh nomefile parola da cercare

VAR="0"
for i in `cat nome-file/$1`
do
        if [[ "$i" = "$2" ]]
         then
                VAR=$(($VAR+1))
        fi
done

echo $VAR
Cosa fa? lanciando lo script script.sh + nomefile + parola, cerca nel file le occorrenze e le pubblica nell' echo finale. Per fare una cosa pulita dovresti, isolare il monitor da controllare nel caso di un collegamento a monitor esterno (hdmi) non venga preso in considerazione, isolare la seconda riga dell' output di xrandr in modo da analizzare solo quella e cercare di non usare un file di testo, ma variabili visto che a esecuzione terminata dello script, verrebbero ''eliminate''.

Personalmente ragionerei in questi termini.
 
vi piace il mio nuovo giocattolino ?

in pratica un quasi ssd da 6 TB

p.s: poterò questo come esempio quando mi diranno " per linux non ci sono i driver".

perchè windows 10 non lo caga
 

Allegati

  • Schermata da 2017-03-20 18-17-07.webp
    Schermata da 2017-03-20 18-17-07.webp
    134.3 KB · Visualizzazioni: 36
Perché giustamente grep riporta le linee che contiene l' occorrenza e wc conta le linee dall' output di grep.
Una riceca veloce mi ha dato questo risultato che secondo me lo potresti prendere come esempio:
Codice:
##INVOCAZIONE: ./script.sh nomefile parola da cercare

VAR="0"
for i in `cat nome-file/$1`
do
        if [[ "$i" = "$2" ]]
         then
                VAR=$(($VAR+1))
        fi
done

echo $VAR
lo script lo conoscevo come una delle mie peregrinazioni sul web in cerca della soluzione..vorrei poter risolvere con una miscela di grep sed awk etc etc. ci sarà la possibilità di contare una stringa in un file maneggiando le stringhe!:boh:
 
Certo tranquillamente anche, se ci aggiungi una regex meglio ancora. Son cose che al tempo della tua conky abbiam visto.
 
Per esempio una cosa un po' grezza. Visto che dall' output di xrandr sappiamo che la riga utile è la seconda, che il quinto campo può essere left, right oppure inverted, noi possiavo visualizzare il quinto campo con awk e lavorare su quello:
Codice:
xrandr | sed -n '2p'| awk '{print $5}'
Se il risultato è uguale a .... left oppure right oppure inverted, fai questo
altrimenti fai quello.
''E con altrimenti fai quello'' significa tutto quello che non è uguale a left oppure right oppure inverted. Capisciuto?
Certo si può pulire ancora in modo da avere un risultato pulito.
Ti ricordo che una variabile può contenere un comando. :P

EDIT: Ieri ti chiesi l' output del comando perché la modalità impostata su normal non la vedevo.
Qui è impostata su left e se conti i campi $5 è left.
Codice:
eDP1 connected primary 1080x1920+0+0 left (normal left inverted right x axis y axis) 260mm x 140mm
Mentre qui è impostata su normal e il quinto campo non è questo e manco quello.
Codice:
eDP1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 260mm x 140mm
Anzi, puoi sfruttare il fatto che quando è impostato a normal, $5 è uguale/case-sensitive a (normal (con parentesi aperta). :P
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top