web-dev-qa-db-fra.com

Aide avec le script bash pour Docky

Je vais affecter ce script à un raccourci clavier afin de pouvoir basculer rapidement Autohide pour Docky.

Je vais créer un deuxième script qui désactive à nouveau Autohide et y affecter un raccourci clavier différent.

La raison de la fermeture et de la relance de Docky est que Docky ne rafraîchit pas les paramètres de configuration autrement. J'ai écrit une commande Sudo et je soupçonne que cela ne fonctionnera pas.

Je veux:

  1. Faites-le sans aucune commande Sudo
  2. Si c'est possible (pas important), ayez un script unifié qui bascule simplement entre "Aucun" et "Intellihide", de sorte que je n'ai pas besoin d'avoir deux clés séparées.
  3. Si possible, demandez à Docky d'actualiser les valeurs de la configuration sans avoir à quitter et à relancer.
#!/bin/bash 
gconftool-2 -t string -s /apps/docky-2/Docky/Interface/DockPreferences/Dock1/Autohide "Intellihide" & 
Sudo killall dockey & 
docky
5
Revetahw

Eh bien, tout d'abord, vous tuez le mauvais programme. Votre script a Sudo killall dockey & mais vous voulez tuer docky, pas dockey. Cela dit, il n'y a absolument aucune raison pour que Sudo, docky ait été démarré par votre utilisateur, vous pouvez donc le tuer sans privilèges spéciaux. Vous n'avez pas non plus besoin de l'envoyer en arrière-plan (c'est ce que le & Est-ce que).

Vous n'avez pas expliqué pourquoi votre script ne fonctionne pas mais ce qui se passe probablement, c'est que vous l'exécutez et que vous ne voyez rien se produire (veuillez toujours expliquer quels sont les symptômes lorsque vous posez des questions). C'est parce que vous envoyez le Sudo ... commande à l'arrière-plan avec &. Sudo attend un mot de passe:

$ Sudo ls
[Sudo] password for terdon: 

Ainsi, lorsque vous l'exécutez, il fournira une invite demandant un mot de passe. Puisque vous l'exécutez en arrière-plan, vous ne verrez jamais cette invite et le script sera bloqué, attendant que vous répondiez.

Je n'utilise pas docky et je ne sais pas si vous pouvez le faire sans le redémarrer mais le redémarrage semble être l'option la plus simple. Modifiez simplement votre script en:

#!/bin/bash

gconftool-2 --get  /apps/docky-2/Docky/Interface/DockPreferences/Dock1/Autohide | grep -q None &&
    gconftool-2 -t string -s /apps/docky-2/Docky/Interface/DockPreferences/Dock1/Autohide "Intellihide" ||
    gconftool-2 -t string -s /apps/docky-2/Docky/Interface/DockPreferences/Dock1/Autohide "None"    

killall docky && docky

Le && signifie AND, en d'autres termes "exécutez la commande suivante uniquement si la précédente a réussi". Le || (OR) est l'inverse, "exécutez la commande suivante si la précédente a échoué. Ainsi, le script ci-dessus demandera d'abord à gconf l'état actuel de Autohide . Le grep ne réussira que s'il correspond à None. Si c'est le cas, il est défini sur Intellihide et sinon, il est défini sur None

Notez que && n'est pas la même chose que &. Le & envoie des commandes à l'arrière-plan comme décrit ci-dessus et n'est pas nécessaire sauf si vous voulez envoyer quelque chose à l'arrière-plan. Pour plus de détails sur les différents opérateurs Shell, voir ici .

4
terdon