Comment désactiver périodiquement l'affichage des fichiers cachés?

10

Donc, afin de cacher certains fichiers et dossiers à des yeux non qualifiés, j'ai modifié leurs noms en mettant un point au début du nom. Cela fonctionne et les fichiers sont cachés. Les curieux qui ne sont pas qualifiés ne les verront pas. Et en utilisant Nautilus, j'active et désactive "afficher les fichiers cachés" en utilisant la combinaison de touches Ctrl- H. Bien. Mais je ne sais jamais si je laisse la fonction activée ou désactivée.

Je voudrais écrire un script bash qui démarre automatiquement toutes les, disons, 10 minutes et désactivera la fonction "afficher les fichiers cachés". Je serais donc sûr que les yeux curieux ne verront jamais les fichiers cachés. Maintenant, le problème est que:

  • Je ne sais pas quelle instruction bash utiliser, le cas échéant. Je suis presque sûr que les scripts bash peuvent faire presque tout, alors aidez-moi!
  • Je ne sais pas comment démarrer automatiquement le script bash toutes les xx secondes ou minutes.

Comment fait-on ça?

Salrandazzo
la source
Salut Sarandazzo, si l'une des réponses résout votre problème (je pense qu'il y a plusieurs réponses qui fonctionnent), seriez-vous si gentil d'accepter la réponse (cochez le grand "V" sous les flèches haut / bas à gauche). C'est la manière appropriée d'indiquer que la réponse a fonctionné pour vous.
Jacob Vlijm

Réponses:

10

Vous pouvez utiliser gsettingspour accéder facilement au paramètre responsable dans le dconfregistre à partir de la ligne de commande.

Le paramètre permettant d'afficher les fichiers cachés (avec les noms commençant par .) se trouve dans le schéma org.gtk.Settings.FileChooseret est appelé show-hidden.

Les valeurs autorisées sont soit true(afficher les fichiers cachés) ou false(ne pas les montrer).

Voici donc les commandes pour activer ou désactiver l'affichage des fichiers cachés:

gsettings set org.gtk.Settings.FileChooser show-hidden true
gsettings set org.gtk.Settings.FileChooser show-hidden false

Pour exécuter automatiquement cette commande toutes les x minutes, il existe deux bonnes ressources pour savoir comment y parvenir:

  • Utilisation cron(la résolution minimale est de 1 minute): help.ubuntu.com: Cron How-to

    Notez que cronexécute des tâches avec un ensemble très limité de envvariables qui n'incluent pas DBUS_SESSION_BUS_ADDRESS, mais cela est nécessaire pour gsettingsfonctionner. Nous devons donc prendre soin de définir cette variable nous-mêmes dans le script que nous exécutons si nous en avons besoin

    J'ai préparé un script pour vous (avec l'aide de @JacobVlijm qui m'a lié cette réponse sur Stack Overflow par @Radu Rădeanu ) qui prend en charge ce problème et peut être exécuté directement par cron:

    #!/bin/bash
    
    # --> Script to disable showing hidden files - to be run as cron job <--
    
    # export DBUS_SESSION_BUS_ADDRESS environment variable
    PID=$(pgrep gnome-session)
    export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
    
    gsettings set org.gtk.Settings.FileChooser show-hidden false
    
  • Sans utiliser cron: Comment exécuter la commande toutes les 10 secondes (sans cron)?

Byte Commander
la source
Ha, tu m'as battu 9 secondes :)
Jacob Vlijm
Salut byte, lors de l'exécution à partir de cron, vous devez définir la DBUS_SESSION_BUS_ADDRESSvariable d'environnement pour faire fonctionner les paramètres d'édition.
Jacob Vlijm
@JacobVlijm Merci, mais je n'ai aucune expérience en cron. C'est pourquoi je viens de relier le site pratique. Pourriez-vous m'aider?
Byte Commander
Absolument, lorsque vous exécutez des commandes à partir de cron, l'ensemble des vars env est (très) limité, comme j'ai déjà trouvé en essayant d'exécuter des commandes à partir de cron. Le bon post est celui-ci: stackoverflow.com/a/19666729/1391444 Les lignes de Radu, je les utilise toujours dans les scripts lors de l'édition de gsettings depuis cron.
Jacob Vlijm
@JacobVlijm Inclus la partie env. est-ce correct?
Byte Commander
5

Je devrai vérifier les autres versions, mais sur 14.04 et 15.10, la gsettingscommande pour vérifier la visibilité des fichiers cachés est:

gsettings get org.gtk.Settings.FileChooser show-hidden
  • Pour définir la valeur sur false(ne pas afficher les fichiers cachés):

    gsettings set org.gtk.Settings.FileChooser show-hidden false
  • ou true:

    gsettings set org.gtk.Settings.FileChooser show-hidden true

1. Un script pour (re) définir la valeur est alors:

#!/usr/bin/env python3
import subprocess
import sys
import time

interval = int(sys.argv[1])

key = "org.gtk.Settings.FileChooser"
val = "show-hidden"

while True:
    time.sleep(interval)
    subprocess.Popen(["gsettings", "set", key, val, "false"])

Pour l'exécuter:

  • copiez le script dans un fichier vide, enregistrez-le sous reset_hidden.py
  • exécutez-le par la commande:

    python3 /path/to/reset_hidden.py <interval>

    où l'intervalle de temps est en secondes, p.ex.

    python3 /path/to/reset_hidden.py 600

Ajoutez-le aux applications de démarrage

Pour l'ajouter aux applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajoutez la commande:

python3 /path/to/reset_hidden.py <interval>

2. Exécutez la commande depuis cron

Si vous préférez exécuter la commande à partir de cron au lieu d'un script d'arrière-plan, une variable d'environnement importante n'est pas définie:

DBUS_SESSION_BUS_ADDRESS

l'édition / la définition des paramètres gs à partir de cron ne fonctionne que si vous définissez d'abord la variable .

Si vous souhaitez l'exécuter depuis cron, faites exécuter cron le script ci-dessous:

#!/bin/bash

PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)

gsettings set org.gtk.Settings.FileChooser show-hidden false

3. Plus élégamment, en utilisant le temps d'inactivité

Si vous travaillez sur votre ordinateur, vous ne voudriez probablement pas que les fichiers se cachent de manière inattendue pendant le travail.

En utilisant le script ci-dessous, les fichiers seront masqués après une période d'inactivité arbitraire. La configuration est exactement comme [1]mais le <interval>temps est maintenant le <idle_time>(en secondes), avant que les fichiers ne se cachent (à nouveau).

Le script a besoin de xprintidle:

sudo apt-get install xprintidle

Le scénario

#!/usr/bin/env python3
import subprocess
import sys
import time

interval = int(sys.argv[1])

key = "org.gtk.Settings.FileChooser"
val = "show-hidden"

idle1 = 0

while True:
    time.sleep(2)
    idle2 = int(subprocess.check_output(["xprintidle"]).decode("utf-8").strip())/1000
    if all([idle1 <= interval, idle2 >= interval]):
        subprocess.Popen(["gsettings", "set", key, val, "false"])
    idle1 = idle2
Jacob Vlijm
la source
1
Je peux confirmer que votre schéma / clé gsettings est correct le 15.10. Et +1 :)
Byte Commander
0
  1. Utilisation gconftool-2pour la nautilus-file-management-propertiespage de manuel: http://manpages.ubuntu.com/manpages/hardy/man1/gconftool-2.1.html
  2. Utilisez crontab -epour votre horaire. page de manuel: https://help.ubuntu.com/community/CronHowto
Ivan Temchenko
la source
1
Je ne peux pas vous dire exactement depuis quand, mais il gconfest obsolète et n'est plus utilisé par au moins Nautilus. Sur mon système 15.10, votre paramètre n'est plus disponible. Vous devez également décrire les étapes plus clairement au lieu de simplement donner des conseils.
Byte Commander