*

Offline TonyWhite

  • Apostolo dello SPAM
  • ********
  • 33.726
  • 202
    • Se proprio non hai un cazzo da fare...
I nostri script
« il: 29 Maggio 2019, 18:34:40 »
Condividiamoli qui!

P.S.
Scusate l'immensa lunghezza del post :lkib:

*

Offline Cire

  • Utente più fastidioso del foro, ben più di Sacco
  • ********
  • 30.932
  • 104
  • Ogni donna sogna un pezzo di Cire
    • Dubito lo finirò tanto presto
Re:I nostri script
« Risposta #1 il: 30 Maggio 2019, 08:54:29 »
 XD Aggiornare la mirrorlist
Codice: [Seleziona]
reflector --country 'Italy' --country 'Germany' --latest 50 --age 24 --sort rate --save /etc/pacman.d/mirrorlist;  rm -f /etc/pacman.d/mirrorlist.pacnew

 XD Pulizia arch
Codice: [Seleziona]
sudo pacman-optimize
sudo pacman -Rsn $(pacman -Qqdt)
sudo paccache -r -u
sudo pacman -Sc

Poi ho gli script per montare le condivisioni di rete.

Edit:
E questo
Codice: [Seleziona]
#! /bin/bash
#Da terminale spostarsi nella cartella e modificare il grep qui sotto
mkdir estratti
grep -r cliente
#cambiare bash con termine di ricerca
FILE_LIST=$(grep -r cliente | cut -d':' -f1)
for file in ${FILE_LIST[@]}; do cp $file estratti/$file ; done
Che non ricordo a cosa servisse esattamente (commentato male) ma doveva essere qualcosa per cercare nei file determinate parole.

Forse per recuperare tutte le mail destinate a un cliente dal MailEnable, il nostro vecchio server di posta.
« Ultima modifica: 30 Maggio 2019, 08:57:36 da Cire »

*

Offline TonyWhite

  • Apostolo dello SPAM
  • ********
  • 33.726
  • 202
    • Se proprio non hai un cazzo da fare...
Re:I nostri script
« Risposta #2 il: 30 Maggio 2019, 10:28:43 »
Uso questo script per montare una cartella remota tramite SSH.
Interfaccia Zenity
Bisogna usare una chiave abilitata dal server.

Codice: [Seleziona]
#!/bin/bash

# Configuration
REMOTE_USER="admin"
REMOTE_IP="11.22.33.44"
REMOTE_PORT="22"
REMOTE_FOLDER="/data"
LOCAL_FOLDER="/mnt/nas_remoto"
LOCAL_KEY="~/.ssh/chiavi/nas_remoto" # Create key with ssh-keygen

# Messages
CONNECTION_NAME="NAS Remoto"
QUESTION_CONNECT="Vuoi connetterti al NAS Remoto?"
QUESTION_DISCONNECT="Il NAS Remoto è già connesso.\n\nVuoi disconnetterti?"
WAIT_CONNECTION="Connessione su NAS Remoto..."
WAIT_DISCONNECTION="Chiusura connessione su NAS Remoto..."
INFO_CONNECTION_OK="Connessione stabilita con successo!"
INFO_CONNECTION_KO="Errore di connessione"
INFO_DISCONNECTION_OK="Connessione chiusa correttamente"
INFO_DISCONNECTION_KO="Errore durante la chiusura della connessione"

PARAMS=$*

function main()
{
  if [[ ${PARAMS[0]} == "autostart" ]];then
    `silent_connection`
  else
    `manage_connection`
  fi
}

function silent_connection()
{
  if [[ `check_connection` == false ]]; then
    `start_connection`
  fi
}

function manage_connection()
{
  if [[ `check_connection` == false ]]; then
    zenity --title="${CONNECTION_NAME}" --question --text="${QUESTION_CONNECT}"
    if [[ $? == 0 ]]; then
      `zen_start_connection`
    fi
  else
    zenity --title="${CONNECTION_NAME}" --question --text="${QUESTION_DISCONNECT}"
    if [[ $? == 0 ]]; then
      `zen_stop_connection`
    fi
  fi
}

# Check if the connection exists
function check_connection()
{
  COUNT_CONNECTION=`df -h | grep ${REMOTE_USER}@${REMOTE_IP} | grep -c "${LOCAL_FOLDER}"`
  if [[ ${COUNT_CONNECTION} == 1 ]]; then
    echo true
  else
    echo false
  fi
}

function start_connection()
{
  sshfs ${REMOTE_USER}@${REMOTE_IP}:${REMOTE_FOLDER} "${LOCAL_FOLDER}" -p ${REMOTE_PORT} -o IdentityFile="${LOCAL_KEY}"
}

function stop_connection()
{
  gksudo umount "${LOCAL_FOLDER}"
}


function zen_start_connection()
{
  (`start_connection`) | zenity --title="SSH @ ${CONNECTION_NAME}" --progress --pulsate --auto-close --text="${WAIT_CONNECTION}"
 
  if [[ `check_connection` == true ]]; then
    zenity --title="SSH @ ${CONNECTION_NAME}" --info --text="${INFO_CONNECTION_OK}"
  else
    zenity --title="SSH @ ${CONNECTION_NAME}" --info --text="${INFO_CONNECTION_KO}"
  fi
}

function zen_stop_connection()
{
  (`stop_connection`) | zenity --title="SSH @ ${CONNECTION_NAME}" --progress --pulsate --auto-close --text="${WAIT_DISCONNECTION}"
 
  if [[ `check_connection` == false ]]; then
    zenity --title="SSH @ ${CONNECTION_NAME}" --info --text="${INFO_DISCONNECTION_OK}"
  else
    zenity --title="SSH @ ${CONNECTION_NAME}" --info --text="${INFO_DISCONNECTION_KO}"
  fi
}

main

Chi preferisce QT, può utilizzare Qarma al posto di Zenity.

EDIT:
Cosa moto importante! Crea questo file sul client per mantenere la connessione attiva. Di default i server SSH effettuano le disconnessioni automaticamente. È una brutta cosa quando stai lavorando e sei costretto a riconnetterti ripetutamente... e magari devi forzare la chiusura di una connessione fantasma.
Codice: ~/.ssh/config [Seleziona]
Host *
  ServerAliveInterval 60
« Ultima modifica: 30 Maggio 2019, 12:12:59 da TonyWhite »

*

Offline TonyWhite

  • Apostolo dello SPAM
  • ********
  • 33.726
  • 202
    • Se proprio non hai un cazzo da fare...
Re:I nostri script
« Risposta #3 il: 20 Aprile 2020, 15:21:22 »
Aggiungo due comandi per chiarire il commento "Create key with ssh-keygen" che ho scritto nel post precedente.
Una volta creata la chiave, il server deve anche riconoscerla, altrimenti il client può provare all'infinito senza risultato! :asd:

Apri il terminale, entra nella cartella ~/.ssh e crea la chiave
Codice: [Seleziona]
ssh-keygen
Ti chiederà:
  • Dove salvare le chiavi
  • Quale nome dare alle chiavi
  • Quale password utilizzare: è una password per poter usare la chiave. Non è la password di accesso all’account e non devi inserire quella! Se lasci il campo vuoto, potrai fare il login con la chiave senza scrivere la password.
È stata creata una coppia di chiavi: una pubblica e una privata.

Ora devi registrare la chiave pubblica sul server
Codice: [Seleziona]
ssh-copy-id -i mykey.pub user@server

Nota
Questa operazione, solitamente, è di competenza esclusiva dell'amministratore del server.

*

Offline TonyWhite

  • Apostolo dello SPAM
  • ********
  • 33.726
  • 202
    • Se proprio non hai un cazzo da fare...
Re:I nostri script
« Risposta #4 il: 27 Maggio 2020, 17:36:20 »
Stavo mettendo mani al server dell'ufficio, quando mi imbatto in una cosa che bla bla bla, arrivo subito al dunque :asd:

Nei miei script voglio usare "sudo" senza usare il terminale.

(click to show/hide)

(click to show/hide)

Questo script funge da GUI per sudo.
Codice: "/usr/bin/zen-sudo" [Seleziona]
#!/bin/bash
zenity --password --title="ZEN Security"


Questo script chiede la password e si avvia come root solo se la password è corretta.
Come vedete, è tutto commentato e potete adattarlo al volo.
Codice: [Seleziona]
#!/bin/bash

# DEPENDENCIES
# coreutils
# sudo
# zenity
# zen-sudo (simple script)

function main()                                                                                    # Main function
{
  zenity --info --ellipsize --text="I am `whoami`\nand the script works flawlessly"                # Change it with your code
}

if [[ "`whoami`" == "root" ]]; then                                                                # I am root?
  main                                                                                             # YES! Start main function with root permissions!
else                                                                                               # NO? In this case...
  export SUDO_ASKPASS="/usr/bin/zen-sudo"                                                          # Define Zenity for sudo GUI
  REALPATH="$(realpath "$0")"                                                                      # Know yourself
  sudo -A "${REALPATH}"                                                                            # Launch itself with sudo (and ask password with Zenity if need)
  SUCCESS="$?"                                                                                     # Read result of sudo: 0 should be great
  if [[ "${SUCCESS}" != "0" ]]; then                                                               # If wrong with sudo...
    zenity --error --ellipsize --title="Something" --text="Can't execute Something"                # Show message.
  else                                                                                             # And if no problems...
    zenity --info --ellipsize --title="Something" --text="I am `whoami`\nand script has ended"     # Show another message.
  fi
fi
Ora sono pronto per usare "sudo" con Zenity sul server di lavoro senza il timore che un aggiornamento (o cambio di DE) possa impedirne il corretto funzionamento.

EDIT:
Ho aggiornato il secondo script. Ora sono consentiti i nomi con gli spazi.

EDIT 2
Sto modificando tutto per fare un unico script. Sarà semplice da usare come il vecchio gksudo, ma con delle migliorie.
« Ultima modifica: 28 Maggio 2020, 10:34:51 da TonyWhite »

*

Offline madnessmike

  • Lo sminchia-board
  • ******
  • 9.606
  • 140
  • Spam a while, spam forever.
Re:I nostri script
« Risposta #5 il: 17 Luglio 2020, 19:36:46 »
Ho preso Doom Eternal, e dato che ha un sacco di comandi che posso mappare sul mouse, ma ne rileva solo 5 su 8, ho creato uno script Python per riassegnare i pulsanti come tasti della tastiera

Codice: [Seleziona]
#!/usr/bin/env python
'''
Piccolo driver che assegna ad alcuni pulsanti extra del mouse la pressione di tasti della tastiera, per permettere di essere usati nei giochi che ne supportano un numero limitato (tipo i nuovi doom)
Questi gli scancodes dell'Elecom Deft Pro, per rilevare quelli specifici del proprio mouse usare la routine print(event) per scoprirla:
Tasto sinistro: code 272
 Pressione rotella: code 274
 Tasto destro: code 273
 Rotella (scorrimento su/giù): code 11; value <0 per su e >0 per giù
 Rotella (tilt sx/dx): code 12; value <0 per sx e >0 per dx
 Tasto indietro: code 275
 Tasto avanti: code 276
 Tasto Fn1: code 277
 Tasto Fn2: code 278
 Tasto Fn3: code 279
'''

from evdev import InputDevice, categorize, ecodes, UInput
ui = UInput()

dev = InputDevice('/dev/input/by-id/usb-ELECOM_TrackBall_Mouse_DEFT_Pro_TrackBall-event-mouse')

for event in dev.read_loop():
#print(event)
if event.code == 274 : #Pressione Rotella
# Button status, 1 is down, 0 is up
if event.value == 1:
ui.write(ecodes.EV_KEY, ecodes.KEY_INSERT, 1)
elif event.value == 0:
ui.write(ecodes.EV_KEY, ecodes.KEY_INSERT, 0)
if event.code == 278 : #Fn2
# Button status, 1 is down, 0 is up
if event.value == 1:
ui.write(ecodes.EV_KEY, ecodes.KEY_HOME, 1)
elif event.value == 0:
ui.write(ecodes.EV_KEY, ecodes.KEY_HOME, 0)
if event.code == 279 : #Fn3
if event.value == 1:
ui.write(ecodes.EV_KEY, ecodes.KEY_END, 1)
elif event.value == 0:
ui.write(ecodes.EV_KEY, ecodes.KEY_END, 0)
if event.code == 12 : #Tilt rotella
if event.value > 0: #Tilt Rotella destra
ui.write(ecodes.EV_KEY, ecodes.KEY_PAGEUP, 1)
ui.write(ecodes.EV_KEY, ecodes.KEY_PAGEUP, 0)
elif event.value < 0: #Tilt Rotella sinistra
ui.write(ecodes.EV_KEY, ecodes.KEY_PAGEDOWN, 1)
ui.write(ecodes.EV_KEY, ecodes.KEY_PAGEDOWN, 0)
ui.syn()
Il bere trionfa sempre sul male

*

Offline TonyWhite

  • Apostolo dello SPAM
  • ********
  • 33.726
  • 202
    • Se proprio non hai un cazzo da fare...
Re:I nostri script
« Risposta #6 il: 17 Luglio 2020, 22:39:31 »
La scienZa nerdica! :tnz: :tnz: :tnz:

*

Offline TonyWhite

  • Apostolo dello SPAM
  • ********
  • 33.726
  • 202
    • Se proprio non hai un cazzo da fare...
Re:I nostri script
« Risposta #7 il: 20 Dicembre 2020, 14:31:40 »
Ultimamente pkexec ha sostituito i vecchi gksu e gksudo, ma ha bisogno di qualche piccolo accorgimento per avviare interfacce grafiche.

zen-sudo riprende il vecchio funzionamento di gksu e gksudo, e funziona su qualsiasi distribuzione Linux.

Codice: [Seleziona]
#!/bin/bash

# DEPENDENCIES
# findutils (xargs)
# neofetch
# sudo
# zenity

# FEATURES
# Can execute script with space in names
# zeroconfig: only 1 script for auto-configure & auto-execute
# It is DE agnostic!

#!/bin/bash
# Search for icon path from current icon theme
# Example:
# get_icon_path "system-shutdown" "22"
function get_icon_path()
{
  ICON_NAME=$1
  ICON_SIZE=$2
  OLD_IFS=$IFS
 
  # Detect icon theme
  IFS=" "
  FETCHINFO=(`neofetch --stdout | grep -m 1 -i "^Icons" | cut -f2 -d ':' | xargs | cut -f1 -d ' '`)
  ICON_THEME_NAME=""
  for ((INDEX=0 ; INDEX < ${#FETCHINFO[@]}; INDEX++)); do
    if [[ ${#ICON_THEME_NAME} -gt 0 ]]; then
      ICON_THEME_NAME+=" "
    fi
    ICON_THEME_NAME+="${FETCHINFO[$INDEX]}"
  done
 
  # Detect iherits themes
  VALID_ICONS_PATH=()                                        # Array of valid icons path
  VALID_THEMES_FOLDERS=()                                    # Array of valid themes folders
  VALID_THEMES_NAMES=("${ICON_THEME_NAME}")                  # Array of valid themes names
  INDEX_VALID_THEMES_NAMES=0                                 # Index for VALID_THEMES_NAMES array
  THEMES_FOLDERS=("/home/$USER/.icons/" "/usr/share/icons/") # Icon theme folders

  while [ $INDEX_VALID_THEMES_NAMES -lt ${#VALID_THEMES_NAMES[@]} ]; do
    for THEME_FOLDER in ${THEMES_FOLDERS[@]}; do
      if [[ -d "${THEME_FOLDER}${VALID_THEMES_NAMES[$INDEX_VALID_THEMES_NAMES]}" ]]; then
        VALID_THEMES_FOLDERS+=("${THEME_FOLDER}${VALID_THEMES_NAMES[$INDEX_VALID_THEMES_NAMES]}/")
       
        # Detect icon name in this theme
        IFS=$'\n'
        THEME_FOLDERS=(`ls -1 -R ${THEME_FOLDER}${VALID_THEMES_NAMES[$INDEX_VALID_THEMES_NAMES]} | grep "/"`)
        THEME_FOLDERS=("${THEME_FOLDERS[@]}")
        for THEME_SUBFOLDER in ${THEME_FOLDERS[@]}; do
          # Filter by size: exact or scalable
          if [[ "${THEME_SUBFOLDER}" == *"${ICON_SIZE}x${ICON_SIZE}"* ]] || [[ "${THEME_SUBFOLDER}" == *"scalable"* ]]; then
            THEME_SUBFOLDER=${THEME_SUBFOLDER::-1} # Remove last char ":"
            THEME_ICONS=(`ls -1 ${THEME_SUBFOLDER}/*${ICON_NAME}* 2>/dev/null`)
            if [[ "$?" != "0" ]]; then
              THEME_ICONS=() # Add icons only if they exists
            fi
            VALID_ICONS_PATH+=(${THEME_ICONS[@]})
          fi
        done
       
        # Detect Inherits themes in index.theme
        IFS="="
        INHERITS_ROW=(`cat ${THEME_FOLDER}${VALID_THEMES_NAMES[${INDEX_VALID_THEMES_NAMES}]}/index.theme | grep -i "^Inherits"`)
        IFS=$OLD_IFS
        INHERITS_THEMES=(`echo ${INHERITS_ROW[1]} | tr ',' ' '`) # Look for the comma as delimiter
       
        # Add inherits themes to VALID_THEMES_NAMES
        for INHERITS_THEME in ${INHERITS_THEMES[@]}; do
          NEW_THEME=true
          for VALID_THEME_NAME in ${VALID_THEMES_NAMES[@]}; do
            if [[ "${INHERITS_THEME}" == "${VALID_THEME_NAME}" ]]; then
              NEW_THEME=false
            fi
          done
          if [[ $NEW_THEME == true ]]; then
            VALID_THEMES_NAMES+=("${INHERITS_THEME}")
          fi
        done
      fi
    done
    INDEX_VALID_THEMES_NAMES=$((INDEX_VALID_THEMES_NAMES+1))
  done
 
  # Search icon in fallback paths
  IFS=$RETURN
  SHARE_ICONS=(`ls -1 /usr/share/icons/* | grep -i "${ICON_NAME}"`)
  SHARE_PIXMAPS=(`ls -1 /usr/share/pixmaps/* | grep -i "${ICON_NAME}"`)
  IFS=$OLD_IFS
  VALID_ICONS_PATH+=(${SHARE_ICONS[@]})
  VALID_ICONS_PATH+=(${SHARE_PIXMAPS[@]})
 
  # Scan valid paths to retrieve icon
  BEST_INDEX=0
  BEST_SCORE=${#VALID_ICONS_PATH[0]}
  BEST_ICON=""
  for ((INDEX=0 ; INDEX < ${#VALID_ICONS_PATH[@]}; INDEX++)); do
    # File must be an image
    if [[ "`xdg-mime query filetype ${VALID_ICONS_PATH[$INDEX]} | grep "^image" -c`" == "1" ]]; then
      RESULT=`basename ${VALID_ICONS_PATH[$INDEX]}`      # Remove path
      RESULT=`echo ${RESULT} | cut -f 1 -d '.'`          # Remove extension
      EXTRA_CHARS=${RESULT//$ICON_NAME/}                 # Remove icon name
      DIRTY=${#EXTRA_CHARS}
      if [[ $DIRTY -lt $BEST_SCORE ]]; then
        BEST_SCORE=${DIRTY}
        BEST_INDEX=${INDEX}
        BEST_ICON="${RESULT}"
        if [[ $DIRTY == 0 ]]; then
          break
        fi
      fi
    fi
  done
  echo "${VALID_ICONS_PATH[$BEST_INDEX]}"
}

###################
# LOCALIZE SCRIPT #
###################

# Default language: en_US
THIS_COMMAND_REQUIRE_ROOT_PERMISSIONS="This command require root permissions"
WORKING_FOLDER="Working folder"
COMMAND_NOT_EXECUTED="Command not executed."
NEED_COMMAND_TO_EXECUTE="You must specify a command to execute."
EXAMPLE="Example"
MAKE_ME_A_SANDWICH="Make me a sandwich"

# Import current language. If it fails, en_US will be used
case "`echo ${LANG} | cut -f1 -d ' ' | cut -f1 -d '.'`" in
  "it_IT")
    THIS_COMMAND_REQUIRE_ROOT_PERMISSIONS="Questo comando richiede i permessi di root"
    WORKING_FOLDER="Cartella di lavoro"
    COMMAND_NOT_EXECUTED="Comando non eseguito."
    NEED_COMMAND_TO_EXECUTE="Devi specificare un comando da eseguire."
    EXAMPLE="Esempio"
    MAKE_ME_A_SANDWICH="Fammi un panino"
    ;;
esac

##########
# SCRIPT #
##########

if [[ "`cat /proc/${PPID}/comm`" == "sudo" ]]; then       # If called from sudo...
  COMMAND="$(cat /proc/${PPID}/cmdline | tr '\0' ' ')"    # Detect command line
  #          └────────────┬──────────┘   └────┬────┘
  #                       │                   └───────────→ Translate all zero bytes with spaces
  #                       └───────────────────────────────→ Print comand line from parent process
  zenity --entry \
  --hide-text \
  --window-icon=$(get_icon_path "dialog-password" "22") \
  --title="zen-sudo" \
  --text="${THIS_COMMAND_REQUIRE_ROOT_PERMISSIONS}:\
  \n${COMMAND}\
  \n\n${WORKING_FOLDER}:\
  \n${PWD}\
  \n\n$1"                                                 # Showing request with command and current folder
else                                                      # If called from user...
  if [[ $# > 0 ]]; then                                   # ...and there is at least one argument
    export SUDO_ASKPASS="$(realpath "$0")"                # I am the guy for the GUI
    sudo -A "$@"                                          # Request root permissions
    SUCCESS="$?"                                          # Read result of sudo: 0 should be great
    if [[ "${SUCCESS}" != "0" ]]; then                    # If wrong with sudo...
     zenity --warning\
     --ellipsize\
     --title="zen-sudo"\
     --text="${COMMAND_NOT_EXECUTED}"
    fi
  else                                                    # If there is no arguments, show info message
    zenity --info\
    --ellipsize\
    --window-icon=$(get_icon_path "dialog-password" "22") \
    --title="zen-sudo"\
    --text="${NEED_COMMAND_TO_EXECUTE}\n\n${EXAMPLE}:\n<span font_family=\"monospace\">zen-sudo zenity --ellipsize --info --text=\"${MAKE_ME_A_SANDWICH}\"</span>"
  fi
fi

Va copiato nella cartella /usr/bin e reso eseguibile.
Ora potete avviare qualsiasi programma grafico con zen-sudo!
Questo programma fa parte del progetto zen-de ed è indipendente da qualsiasi ambiente desktop.