Indicateur d'utilisation du système de fichiers

10

Je ne parviens pas à trouver un utilitaire approprié pour indiquer l’utilisation du système de fichiers (% d’espace libre pour les partitions) sur le panneau.

Et je ne suis pas impatient d'installer des outils de gestion de bureau de mauvaise qualité, mais un simple indicateur.

J'apprécie toutes vos suggestions.

    
posée Dinesh Kalidassan 26.09.2016 - 08:18
la source

3 réponses

18

EDIT:

1. NOUVELLE RÉPONSE

Bien que la réponse au bas de celle-ci puisse être utilisée (voir [2.] ), cela conduit à une ppa -version avec des options supplémentaires, à définir dans une fenêtre de préférences.

Les options incluent:

  • Définition de tous les alias dans une fenêtre
  • Définition des couleurs de thème pour l’icône du panneau:

    < a href="https://i.stack.imgur.com/t3jTm.png">

  • Définition du seuil pour les avertissements
  • Afficher les informations sur les volumes nouvellement montés / connectés dans une notification:

  • Exécuter au démarrage

De plus, l’indicateur inclut désormais une icône plus petite (largeur) pour les autres distributions (comme xfce), qui sera automatiquement appliquée, en fonction du gestionnaire de fenêtres.

Pour installer:

sudo add-apt-repository ppa:vlijm/spaceview
sudo apt-get update
sudo apt-get install spaceview


2. VIEILLE RÉPONSE

Le script ci-dessous est un indicateur qui répertorie vos appareils et indique leur utilisation. Les informations sont mises à jour (si nécessaire) une fois toutes les dix secondes.

En outre

  • Lorsque l'indicateur est actif, vous pouvez choisir un périphérique à représenter dans l'icône. L’appareil sera mémorisé lors de la prochaine exécution de l’indicateur:

  • Pour un ou plusieurs périphériques (ou tous), vous pouvez définir un autre nom ("nom personnalisé") à définir en tête du script

    Par exemple, ceci:

    alias = [
        ["sdc1", "stick"],
        ["sdb1", "External"],
        ["sda2", "root"],
        ["sda4", "ntfs1"],
        ["sda5", "ntfs2"],
        ["//192.168.0.104/media", "netwerk media"],
        ["//192.168.0.104/werkmap_documenten", "netwerk docs"],
        ]
    

    montrera:

  • Vous pouvez définir un threshhold ; Si l'espace libre de l'un de vos appareils est inférieur à celui-ci, vous recevrez un avertissement:

  • Les appareils connectés / débranchés seront ajoutés / retirés du menu dans les 10 secondes.

Le script

#!/usr/bin/env python3
import subprocess
import os
import time
import signal
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, AppIndicator3, GObject
from threading import Thread

#--- set alias names below in the format [[device1, alias1], [device2, alias2]]
#--- just set alias = [] to have no custom naming
alias = []
#--- set the threshold to show a warning below 
#--- set to 0 to have no warning
threshold = 17
#---
currpath = os.path.dirname(os.path.realpath(__file__))
prefsfile = os.path.join(currpath, "showpreferred")

class ShowDevs():
    def __init__(self):
        self.default_dev = self.get_showfromfile()
        self.app = 'show_dev'
        iconpath = currpath+"/0.png"
        self.indicator = AppIndicator3.Indicator.new(
            self.app, iconpath,
            AppIndicator3.IndicatorCategory.OTHER)
        self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)       
        self.indicator.set_menu(self.create_menu())
        self.indicator.set_label("Starting up...", self.app)
        self.update = Thread(target=self.check_changes)
        self.update.setDaemon(True)
        self.update.start()

    def check_changes(self):
        state1 = None
        while True:
            self.state2 = self.read_devices()
            if self.state2 != state1:
                self.update_interface(self.state2)
            state1 = self.state2
            time.sleep(10)

    def update_interface(self, state):
        warning = False; self.newmenu = []
        for dev in state:
            mention = self.create_mention(dev)
            name = mention[0]; deci = mention[2]; n = mention[1]
            if n <= threshold:
                warning = True
            try:
                if self.default_dev in name:
                    newlabel = mention[3]
                    newicon = currpath+"/"+str(10-deci)+".png"
            except TypeError:
                pass
            self.newmenu.append(name+" "+str(n)+"% free")
        if warning:
            newlabel = "Check your disks!"
            newicon = currpath+"/10.png"
        try:
            self.update_indicator(newlabel, newicon)
        except UnboundLocalError:
            labeldata = self.create_mention(state[0])
            newlabel = labeldata[3]
            newicon = currpath+"/"+str(10-labeldata[2])+".png"
            self.update_indicator(newlabel, newicon)
        GObject.idle_add(self.set_new, 
            priority=GObject.PRIORITY_DEFAULT)  

    def update_indicator(self, newlabel, newicon):
        GObject.idle_add(self.indicator.set_label,
            newlabel, self.app,
            priority=GObject.PRIORITY_DEFAULT)   
        GObject.idle_add(self.indicator.set_icon,
            newicon,
            priority=GObject.PRIORITY_DEFAULT)

    def set_new(self):
        for i in self.initmenu.get_children():
            self.initmenu.remove(i)
        for item in self.newmenu:
            add = Gtk.MenuItem(item)
            add.connect('activate', self.change_show)
            self.initmenu.append(add) 
        menu_sep = Gtk.SeparatorMenuItem()
        self.initmenu.append(menu_sep)
        self.item_quit = Gtk.MenuItem('Quit')
        self.item_quit.connect('activate', self.stop)
        self.initmenu.append(self.item_quit)
        self.initmenu.show_all()

    def change_show(self, *args):
        index = self.initmenu.get_children().index(self.initmenu.get_active())
        self.default_dev = self.newmenu[index].split()[0]
        open(prefsfile, "wt").write(self.default_dev)
        self.update_interface(self.read_devices())

    def create_mention(self, dev):
        name = dev[1] if dev[1] else dev[0]
        n = dev[2]; deci = round(dev[2]/10)
        newlabel = name+" "+str(n)+"% free"
        return (name, n, deci, newlabel)        

    def create_menu(self):
        # create initial basic menu
        self.initmenu = Gtk.Menu()
        self.item_quit = Gtk.MenuItem('Quit')
        self.item_quit.connect('activate', self.stop)
        self.initmenu.append(self.item_quit)
        self.initmenu.show_all()
        return self.initmenu

    def read_devices(self):
        # read the devices, look up their alias and the free sapace
        devdata = []
        data = subprocess.check_output(["df", "-h"]).decode("utf-8").splitlines()
        relevant = [l for l in data if all([
                    any([l.startswith("/dev/"), l.startswith("//")]),
                    not "/loop" in l])
                    ]
        for dev in relevant:
            data = dev.split(); name = data[0]; pseudo = None       
            free = 100-int([s.strip("%") for s in data if "%" in s][0])
            for al in alias:
                if al[0] in name:
                    pseudo = al[1]
                    break
            devdata.append((name, pseudo, free)) 
        return devdata

    def get_showfromfile(self):
        # read the preferred default device from file
        try:
            defdev = open(prefsfile).read().strip()
        except FileNotFoundError:
            defdev = None
        return defdev

    def stop(self, source):
        Gtk.main_quit()

ShowDevs()
GObject.threads_init()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()

Les icônes

0.png

1.png

2.png

3.png

4.png

5.png

6.png

7.png

8.png

9.png

10.png

Mise en place

La configuration est simple:

  • Copiez le script dans un fichier vide, enregistrez-le sous le nom showusage.py
  • Enregistrez les icônes ci-dessus, exactement comme dans leur étiquette , dans le même répertoire que le script (clic droit & gt; Enregistrer sous)
  • Dans la tête du script, définissez (éventuellement) des noms alternatifs ( aliasses ). Ci-dessous un exemple:

    alias = [
        ["sda2", "root"],
        ["sdb1", "External"]
        ]
    

    Si vous souhaitez afficher les périphériques sans modification, utilisez:

    alias = []
    

    ...et si vous le souhaitez, modifiez le seuil pour afficher un avertissement:

    #--- set the threshold to show a warning below (% free, in steps of 10%)
    #--- set to 0 to have no warning
    threshold = 10
    

    C'est ça

Exécuter

Pour utiliser l'indicateur, exécutez la commande:

python3 /path/to/showusage.py

Pour l’ajouter aux applications de démarrage, utilisez la commande:

/bin/bash -c "sleep 10 && python3 /path/to/showusage.py"

Choisissez Applications: Dash & gt; Applications de démarrage & gt; Ajoutez, ajoutez la commande ci-dessus.

    
réponse donnée Jacob Vlijm 26.09.2016 - 20:17
la source
13

disclaimer: je suis l’auteur de cet indicateur et il est écrit pour cette question spécifique

Mise à jour le 29 octobre 2016

L'indicateur dispose désormais de la fonctionnalité de démontage et les alias ont été rendus uniques en faisant référence à l'UUID de chaque partition au lieu du nom de périphérique du bloc tel que sda1 . Consultez le rapport de bogue associé

Mise à jour, 8 octobre 2016

L’indicateur est maintenant dans la version 2.0, a ajouté quelques fonctionnalités et possède son propre PPA.

Pour installer à partir de PPA, procédez comme suit dans le terminal:

  1. sudo apt-add-repository ppa:udisks-indicator-team/ppa
  2. sudo bash -c 'apt-get update && apt-get install udisks-indicator'

Comme indiqué dans les notes de version , ces fonctionnalités incluent:

  • Icônes pour les entrées de menu: une icône appropriée est associée à chaque partition / périphérique. Si le périphérique est un disque USB, l'icône du support amovible est utilisée, s'il s'agit d'une image iso - l'icône du disque optique est utilisée et, évidemment, les partitions de disque dur / SSD ont des icônes de disque.
  • L’utilisation est maintenant affichée en pourcentage et en valeurs lisibles par l’homme (puissances de 1024).
  • Représentation graphique de l’utilisation via la barre d’utilisation (merci à Mateo Salta pour l’idée)
  • Boîte de dialogue Préférences: les utilisateurs peuvent désactiver certains champs qu’ils ne souhaitent pas voir pour chaque entrée de menu. Cela permet de garder le menu de l'indicateur propre s'il y a une grande quantité de partitions attachées. (Merci à la demande de Zacharee)
  • Espacement du texte: avec les polices Ubuntu et Monospace par défaut, les entrées de texte sont bien espacées pour avoir une apparence plus nette et améliorer la lisibilité des informations.
  • Bulles de notification si la partition ne peut pas être montée

Ci-dessous, la capture d'écran avec le thème d'icône par défaut d'Ubuntu:

Ubuntu Kylin icon theme

Avec tous les champs facultatifs désactivés

Choix de conception et réflexions supplémentaires:

Dans l’élaboration de cet indicateur, j’espérais réaliser un utilitaire qui conviendrait aussi bien aux utilisateurs avancés qu’aux utilisateurs occasionnels. J'ai essayé de résoudre certains des problèmes que j'ai remarqués chez les nouveaux utilisateurs en matière de gestion des outils de ligne de commande. En outre, l'utilitaire s'efforce d'être polyvalent.

La boîte de dialogue Préférences permet de rendre l'indicateur aussi complexe et / ou aussi simple que le souhaite l'utilisateur. C'était également une décision de conception spécifique de ne pas avoir d'étiquette dans le panneau supérieur, de sorte qu'elle ne prenne pas trop de place sur le panneau supérieur de l'utilisateur. En outre, cet indicateur vise à être un utilitaire polyvalent permettant de monter des partitions et d’ouvrir leurs répertoires respectifs. Cela peut être utilisé non seulement comme utilitaire d’utilisation du disque, mais également comme utilitaire de navigation pour l’ouverture rapide des répertoires.

Il est également pratique pour les utilisateurs de savoir quelle partition habite quel disque, évitant ainsi une confusion fréquente lors du montage via des utilitaires de ligne de commande tels que mount . Au lieu de cela, il emploie udisksctl à cette fin (ainsi que pour obtenir les informations du démon UDisks2 , d'où le nom). La seule tâche qu'elle n'effectue pas est le démontage et, pour cette raison, l'entrée de menu Open Disks Utility est incluse.

Au départ, je cherchais à le rendre similaire à iStat menulet, mais le projet a divergé de cet objectif - l’indicateur est unique dans sa conception et son objectif. J'espère que cela sera utile pour de nombreux utilisateurs et rendra leur expérience Ubuntu beaucoup plus agréable.

indicateur de disque dur (réponse originale)

Indicateur pour Ubuntu avec Unity Desktop pour afficher l'utilisation du disque

Aperçu

Cet indicateur pour Ubuntu avec Unity permet de visualiser facilement les informations relatives à vos partitions montées. Il s'efforce d'être visuellement similaire au menu d'iStat Menu 3 d'OS X.

Les entrées sont organisées dans l’ordre:

  • Partition
  • Alias ​​(si défini par l'utilisateur)
  • Disque auquel appartient la partition
  • Point de montage de la partition (répertoire)
  • % d'utilisation

Un clic sur chaque entrée de partition ouvre le point de montage de la partition dans le gestionnaire de fichiers par défaut

Le menu "Unmounted Partitions" répertorie toutes les partitions actuellement non montées par le système.En cliquant sur une entrée dans ce sous-menu, cette partition sera montée automatiquement, généralement dans le dossier /media/username/drive-id

.

L’indicateur utilise les icônes par défaut fournies avec le système, l’icône doit donc changer à mesure que vous changez le thème de l’icône à l’aide de l’outil Unity Tweak ou d’autres méthodes

REMARQUE : si vous souhaitez ajouter plusieurs alias à la fois, au lieu d'un par un avec l'option "Créer un alias", vous pouvez modifier le fichier de configuration ~/.partition_aliases.json . Le format est le suivant:

{
    "sda1": "Alias 1",
    "sda2": "Alias 2",
    "sdb1": "Alias 3"
}

Installation

PPA pour une installation facile à venir. . .

En attendant, voici d'autres étapes:

  1. cd /tmp
  2. wget https://github.com/SergKolo/udisks-indicator/archive/master.zip
  3. unzip master.zip
  4. sudo install udisks-indicator-master/udisks-indicator /usr/bin/udisks-indicator
  5. sudo install udisks-indicator-master/udisks-indicator.desktop /usr/share/applications/udisks-indicator.desktop

Toutes ces étapes peuvent être placées dans un joli petit script d’installation:     

#!/bin/bash

cd /tmp
rm master.zip*
wget https://github.com/SergKolo/udisks-indicator/archive/master.zip
unzip master.zip
install udisks-indicator-master/udisks-indicator /usr/bin/udisks-indicator
install udisks-indicator-master/udisks-indicator.desktop /usr/share/applications/udisks-indicator.desktop

Code source

Le code source original (version v1.0) avec les fonctionnalités de base de cet indicateur peut être trouvé ci-dessous. Pour les fonctionnalités les plus récentes, consultez le référentiel GitHub de ce projet . S'il vous plaît signaler toutes les demandes de fonctionnalités ainsi que des erreurs sur GitHub.

Le /usr/bin/udisks-indicator :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

#
# Author: Serg Kolo , contact: [email protected]
# Date: September 27 , 2016
# Purpose: appindicator for displaying mounted filesystem usage
# Tested on: Ubuntu 16.04 LTS
#
#
# Licensed under The MIT License (MIT).
# See included LICENSE file or the notice below.
#
# Copyright © 2016 Sergiy Kolodyazhnyy
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import gi
gi.require_version('AppIndicator3', '0.1')
from gi.repository import GLib as glib
from gi.repository import AppIndicator3 as appindicator
from gi.repository import Gtk as gtk
from os import statvfs
#from collections import OrderedDict
import subprocess
import shutil
import dbus
import json
import os

class UdisksIndicator(object):

    def __init__(self):
        self.app = appindicator.Indicator.new(
            'udisks-indicator', "drive-harddisk-symbolic.svg",
            appindicator.IndicatorCategory.HARDWARE
            )

        if not self.app.get_icon():
           self.app.set_icon("drive-harddisk-symbolic")

        self.app.set_status(appindicator.IndicatorStatus.ACTIVE)

        filename = '.partition_aliases.json'
        user_home = os.path.expanduser('~')
        self.config_file = os.path.join(user_home,filename)
        self.cache = self.get_partitions()
        self.make_menu()
        self.update()


    def update(self):
        timeout = 5
        glib.timeout_add_seconds(timeout,self.callback)

    def callback(self):
        if self.cache != self.get_partitions():
            self.make_menu()
        self.update()        

    def make_menu(self,*args):
        """ generates entries in the indicator"""
        if hasattr(self, 'app_menu'):
            for item in self.app_menu.get_children():
                self.app_menu.remove(item)

        self.app_menu = gtk.Menu()

        partitions = self.get_partitions()
        for i in partitions:

            part = "Partition: " + i[0]
            alias = self.find_alias(i[0])
            drive = "\nDrive: " + i[1]
            mount = "\nMountPoint: " + i[2]
            usage = "\n%Usage: " + i[3]

            item = part + drive + mount + usage
            if alias:
                alias = "\nAlias: " + alias
                item = part + alias + drive + mount + usage

            self.menu_item = gtk.MenuItem(item)
            self.menu_item.connect('activate',self.open_mountpoint,i[2])
            self.app_menu.append(self.menu_item)
            self.menu_item.show()

            self.separator = gtk.SeparatorMenuItem()
            self.app_menu.append(self.separator)
            self.separator.show()

        self.unmounted = gtk.MenuItem('Unmounted Partitions')
        self.unmounted_submenu = gtk.Menu()
        self.unmounted.set_submenu(self.unmounted_submenu)

        for i in self.get_unmounted_partitions():

            # TODO: add type checking, prevent swap

            part = "Partition: " + i[0]
            alias = self.find_alias(i[0])
            drive = "\nDrive: " + i[1]
            label = part + drive
            if alias: 
               alias = "\nAlias: " + alias
               label = part + alias + drive

            self.menu_item = gtk.MenuItem(label)
            self.menu_item.connect('activate',self.mount_partition,i[0])
            self.unmounted_submenu.append(self.menu_item)
            self.menu_item.show()

            self.separator = gtk.SeparatorMenuItem()
            self.unmounted_submenu.append(self.separator)
            self.separator.show()

        self.app_menu.append(self.unmounted)
        self.unmounted.show()


        self.separator = gtk.SeparatorMenuItem()
        self.app_menu.append(self.separator)
        self.separator.show()

        self.make_part_alias = gtk.MenuItem('Make Alias')
        self.make_part_alias.connect('activate',self.make_alias)
        self.app_menu.append(self.make_part_alias)
        self.make_part_alias.show()

        user_home = os.path.expanduser('~')
        desktop_file = '.config/autostart/udisks-indicator.desktop'
        full_path = os.path.join(user_home,desktop_file)

        label = 'Start Automatically' 
        if os.path.exists(full_path):
           label = label + ' \u2714'
        self.autostart = gtk.MenuItem(label)
        self.autostart.connect('activate',self.toggle_auto_startup)
        self.app_menu.append(self.autostart)
        self.autostart.show()

        self.open_gnome_disks = gtk.MenuItem('Open Disks Utility')
        self.open_gnome_disks.connect('activate',self.open_disks_utility)
        self.app_menu.append(self.open_gnome_disks)
        self.open_gnome_disks.show()

        self.quit_app = gtk.MenuItem('Quit')
        self.quit_app.connect('activate', self.quit)
        self.app_menu.append(self.quit_app)
        self.quit_app.show()

        self.app.set_menu(self.app_menu)

    def mount_partition(self,*args):
        # TODO: implement error checking for mounting
        return self.run_cmd(['udisksctl','mount','-b','/dev/' + args[-1]])

    def get_mountpoint_usage(self,mountpoint):
        fs = statvfs(mountpoint)
        usage = 100*(float(fs.f_blocks)-float(fs.f_bfree))/float(fs.f_blocks)
        return str("{0:.2f}".format(usage))

    def get_partitions(self):
        objects = self.get_dbus('system', 
                           'org.freedesktop.UDisks2', 
                           '/org/freedesktop/UDisks2', 
                           'org.freedesktop.DBus.ObjectManager',
                           'GetManagedObjects',
                           None)


        partitions = []
        for item in objects:
            try:
                if 'block_devices'  in str(item):


                       drive = self.get_dbus_property('system',
                                        'org.freedesktop.UDisks2',
                                        item,
                                        'org.freedesktop.UDisks2.Block',
                                        'Drive')
                       if drive == '/': continue

                       mountpoint = self.get_mountpoint(item)
                       if not mountpoint: continue
                       mountpoint = mountpoint.replace('\x00','')

                       drive = str(drive).split('/')[-1]
                       usage = self.get_mountpoint_usage(mountpoint)

                       part = str(item.split('/')[-1])
                       partitions.append((part,drive,mountpoint,usage))                       

            except Exception as e:
                #print(e)
                pass

        # returning list of tuples
        partitions.sort()
        return partitions

    def get_mountpoint(self,dev_path):
        try:
            data = self.get_dbus_property(
                             'system',
                             'org.freedesktop.UDisks2',
                             dev_path,
                             'org.freedesktop.UDisks2.Filesystem',
                             'MountPoints')[0]

        except Exception as e:
            #print(e)
            return None
        else:
            if len(data) > 0:
                return ''.join([ chr(byte) for byte in data])


    def get_unmounted_partitions(self):
        objects = self.get_dbus('system', 
                           'org.freedesktop.UDisks2', 
                           '/org/freedesktop/UDisks2', 
                           'org.freedesktop.DBus.ObjectManager',
                           'GetManagedObjects',
                           None)


        partitions = []
        for item in objects:
            try:
                if 'block_devices'  in str(item):
                       drive = self.get_dbus_property('system',
                                        'org.freedesktop.UDisks2',
                                        item,
                                        'org.freedesktop.UDisks2.Block',
                                        'Drive')
                       if drive == '/': continue

                       mountpoint = self.get_mountpoint(item)
                       if  mountpoint: continue

                       drive = str(drive).split('/')[-1]
                       part = str(item.split('/')[-1])
                       if not part[-1].isdigit(): continue
                       partitions.append((part,drive))                       
                       #print(partitions)

            except Exception as e:
                #print(e)
                pass

        partitions.sort()
        return partitions

    def get_dbus(self,bus_type,obj,path,interface,method,arg):
        if bus_type == "session":
            bus = dbus.SessionBus() 
        if bus_type == "system":
            bus = dbus.SystemBus()
        proxy = bus.get_object(obj,path)
        method = proxy.get_dbus_method(method,interface)
        if arg:
            return method(arg)
        else:
            return method()

    def get_dbus_property(self,bus_type,obj,path,iface,prop):

        if bus_type == "session":
           bus = dbus.SessionBus()
        if bus_type == "system":
           bus = dbus.SystemBus()
        proxy = bus.get_object(obj,path)
        aux = 'org.freedesktop.DBus.Properties'
        props_iface = dbus.Interface(proxy,aux)
        props = props_iface.Get(iface,prop)
        return props

    def make_alias(self,*args):
        partitions = [ i[0] for i in self.get_partitions() ]

        combo_values = '|'.join(partitions)
        #print(combo_values)
        command=[ 'zenity','--forms','--title','Make Alias',
                  '--add-combo','Partition','--combo-values',
                  combo_values,'--add-entry','Alias'    ]        
        user_input = self.run_cmd(command)
        if not user_input: return

        alias = user_input.decode().strip().split('|')

        existing_values = None

        if os.path.isfile(self.config_file):
            with open(self.config_file) as conf_file:
                try:
                    existing_values = json.load(conf_file)
                except ValueError:
                    pass


        with open(self.config_file,'w') as conf_file:
             if existing_values:
                 existing_values[alias[0]] = alias[1]
             else:
                 existing_values = {alias[0]:alias[1]}

             #print(existing_values)
             json.dump(existing_values,conf_file,indent=4,sort_keys=True)


    def find_alias(self,part):
        if os.path.isfile(self.config_file):
            with open(self.config_file) as conf_file:
                try:
                    aliases = json.load(conf_file)
                except ValueError:
                    pass
                else:
                    if part in aliases:
                       return aliases[part]
                    else:
                       return None

    def toggle_auto_startup(self,*args):
        user_home = os.path.expanduser('~')
        desktop_file = '.config/autostart/udisks-indicator.desktop'
        full_path = os.path.join(user_home,desktop_file)

        if os.path.exists(full_path):
           os.unlink(full_path)
        else:
           original = '/usr/share/applications/udisks-indicator.desktop'
           if os.path.exists(original):
               shutil.copyfile(original,full_path)

        self.make_menu()


    def open_mountpoint(self,*args):
        pid = subprocess.Popen(['xdg-open',args[-1]]).pid

    def open_disks_utility(self,*args):
        pid = subprocess.Popen(['gnome-disks']).pid

    def run_cmd(self, cmdlist):
        """ Reusable function for running external commands """
        new_env = dict(os.environ)
        new_env['LC_ALL'] = 'C'
        try:
            stdout = subprocess.check_output(cmdlist, env=new_env)
        except subprocess.CalledProcessError:
            pass
        else:
            if stdout:
                return stdout

    def run(self):
        """ Launches the indicator """
        try:
            gtk.main()
        except KeyboardInterrupt:
            pass

    def quit(self, data=None):
        """ closes indicator """
        gtk.main_quit()

def main():
    """ defines program entry point """
    indicator = UdisksIndicator()
    indicator.run()

if __name__ == '__main__':
    main()

Le /usr/share/applications/udisks-indicator.desktop

[Desktop Entry]
Version=1.0
Name=Udisks Indicator
Comment=Indicator for reporting partition information
Exec=udisks-indicator
Type=Application
Icon=drive-harddisk-symbolic.svg
Terminal=false

Informations supplémentaires:

Ubuntu Mate 16.04 test:

Les utilisateurs de Gnome ont besoin d’une extension (KStatusNotifierItem / AppIndicator Support) pour que l’indicateur se comporte correctement:

    
réponse donnée Sergiy Kolodyazhnyy 28.09.2016 - 03:00
la source
4

Installez l’indicateur Sysmonitor :

sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor
sudo apt-get update
sudo apt-get install indicator-sysmonitor

et l'option "Espace disponible dans le système de fichiers".

    
réponse donnée Bernmeister 26.09.2016 - 14:56
la source

Lire d'autres questions sur les étiquettes