web-dev-qa-db-fra.com

Comment intégrer "run as shell script" dans le menu contextuel du gestionnaire de fichiers?

Maintenant, lorsque je veux exécuter un script Shell (fichier .sh ou .csh), je dois cliquer avec le bouton droit de la souris sur le gestionnaire de fichiers, cliquer sur "Ouvrir le terminal ici", puis taper "./xxx.sh" pour exécuter le fichier de script Shell. C'est très gênant pour moi. Cependant, y a-t-il un moyen d'intégrer "exécuter en tant que script Shell lorsque je clique avec le bouton droit de la souris sur un fichier de texte plat"?

Voici le gestionnaire de fichiers que j'utilise le plus souvent: Thunar (sous Xfce4), PCManFM (sous LXDE) et Nautilus (sous Gnome).

1
pah8J

Clic droit pour exécuter le script dans Nautilus

Voici comment j'ai configuré ce script: Nautilus peut définir un fond d'écran. Comment définir une connexion et un écran de verrouillage? .

Après avoir utilisé Nautilus pour naviguer et afficher un fichier .png ou .jpg approprié à utiliser comme écran de connexion et écran verrouillé, Nautilus peut le définir pour vous à l'aide d'un script.

Pour créer le script, utilisez:

cd ~/.local/share/nautilus/scripts/
gedit set-login-wallpaper

Coller dans ces lignes:

#!/bin/bash

## Set login wallpaper

# strip new line char passed by Nautilus
FILENAME=$(echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | sed -e 's/\r//g')

# Multiple files can't be selected.
LINE_COUNT=$(wc -l <<< "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS")
LINE_COUNT=$((LINE_COUNT-1))

if [[ $LINE_COUNT > 1 ]] ; then
    zenity --error --text "Ony one file can be selected at a time! "
    exit 1
fi

# Object type must be "file..." (ie no directories, etc.)
if [ -d "${FILENAME}" ] ; then
    zenity --error --text "$FILENAME is a directory!";
    exit 1
else
    if [ -f "${FILENAME}" ]; then
        : # Bash noop
    else
        zenity --error --text "${FILENAME} is not a file!";
        exit 2
    fi
fi

# Build working file in /tmp
echo "[com.canonical.unity-greeter]" > /tmp/set-login-wallpaper.tmp
echo "draw-user-backgrounds=false" >> /tmp/set-login-wallpaper.tmp
echo "background='$FILENAME'" >> /tmp/set-login-wallpaper.tmp

# Must run as Sudo
if [ "$EUID" -ne 0 ] ; then

    # Get Sudo password
    PASSWORD=$(zenity --password --title="Set Login Wallpaper" --timeout=20)

    # copy working file to real file using Sudo
    echo $PASSWORD | Sudo -S cp /tmp/set-login-wallpaper.tmp \
/usr/share/glib-2.0/schemas/10_unity_greeter_background.gschema.override

    # compile using Sudo
    echo $PASSWORD | Sudo -S glib-compile-schemas /usr/share/glib-2.0/schemas

else
    # Already Sudo so simply copy and compile
    # copy working file to real file
    cp /tmp/set-login-wallpaper.tmp \
/usr/share/glib-2.0/schemas/10_unity_greeter_background.gschema.override

    # compile
    glib-compile-schemas /usr/share/glib-2.0/schemas
fi

exit 0

Enregistrez le fichier et quittez l'éditeur gedit.

Maintenant, marquez le script comme exécutable en utilisant:

chmod +x set-login-wallpaper

Ouvrez Nautilus et accédez à votre répertoire avec des images de papier peint. Recherchez une image appropriée et cliquez dessus avec le bouton droit de la souris. Ce menu déroulant apparaît:

Nautilus Right Click Drop Down

Cliquez sur la troisième option Scripts. Un autre menu déroulant apparaît avec tous vos scripts:

Nautilus set-login-wallpaper Drop Down

Sélectionnez set-login-wallpaper.

Lorsque le script sera exécuté, vous devrez entrer votre mot de passe Sudo.

Redémarrez et profitez de votre nouvel identifiant et verrouillez le fond d'écran.

2