toma222
Salut,
Ce n'est pas étonnant, System Monitor est sans doute le desklet le plus difficile à configurer. Regardes dans le fichier config.txt et supprimes ce qui peut poser problème (ex : la partie sur la batterie si tu n'en as pas, le chemin vers la température...).
Bon courage.
akuma
Bonsoir,
à propos de SystemMonitor et du thermomètre
je fais partie de ceux qui n'ont rien dans leur répertoire /proc/acpi/thermal_zone/
que faire ? (j'ai cherché dans le forum, en particulier dans ce post)
j'ai installé lm-sensors, ça a qqchose à voir ? c'était ce qu'il fallait faire ?
après j'essaye d'exécuter le script mkdev.sh vu plus haut. ça merde sur mknod, apparemment il faut que je sois en root. donc avant de me mettre en root, je demande : il fait quoi ce script ?
pour le reste (j'ai viré batterie et thermomètre) ça marche sans problème
Chrisnaps
Salut à tous,
J'essaye de configurer SystemMonitor, mais j'ai un beau message d'erreur au lancement du test, je comprends pas trop ce qui ne va pas et ce qu'il faut que je change, j'ai essayé de mettre les lignes en commentaire, mais biensur, j'avais d'autre erreurs.
Pouvez m'aider à comprendre ce qu'il ne va pas ?
Merci de votre aide 😉
Traceback (most recent call last):
File "./SystemMonitor.py", line 1107, in ?
EventHandler(dirname(__file__)).pause()
File "./SystemMonitor.py", line 974, in __init__
adesklets.Events_handler.__init__(self)
File "/usr/lib/python2.4/site-packages/adesklets/events_handler.py", line 157, in __init__
self.ready()
File "./SystemMonitor.py", line 1004, in ready
self.meters[-1].create((8,tmp_height), self.basedir, meter[1])
File "./SystemMonitor.py", line 918, in create
info = self.parseFile(self.info_file)
File "./SystemMonitor.py", line 905, in parseFile
[key, value] = split(":\s+", line)
ValueError: need more than 1 value to unpack
akuma
Je comprends rien à tes erreurs mais dans un premier temps tu peux essayer d'enlever les lignes correspondant à la température, là la batterie, pour voir. Ca doit être les plus délicates.
brouche
Chrisnaps
Merci pour les liens 😉
Je suis en train d'éliminer les erreurs petit à petit, c'est long car j'en ai un paquet 🙁
J'ai également mis le fichier de conf de la première page, ca fonctionne bien 🙂
Je vais essayé de faire fonctionner la charge de la batterie ainsi que l'indicateur d'utilisation réseau pour le wifi 😉
Seo
J'utilise adesklets 0.5 et quand je lance un .py, la fenêtre apparaît puis disparaît.
Si j'ai bien lu la FAQ, c un problème avec Nautilus ?
Je le résout comment ?
akuma
Lance-le dans un terminal :
Pour ouvrir un terminal, tape Alt+F2, tape xterm puis entrée.
Ensuite la commande cd pour aller dans le répertoire contenant le script .py.
Puis tape ./le_nom_du_script.py. (puis entrée)
Cela dit chez moi si je lance depuis nautilus la fenêtre disparaît mais ça marche qd même, simplement il a fini le boulot donc il reste pas affiché.
Seo
Non, cela me fait pareil :/
Chrisnaps
c'est en test qu'il te fait ca ou meme quand il est enregistré ?
S'il te le fait en test, il me fait la meme chose, mais au lancement aucun problème il reste la 😉
la commande que je lance : adesklets --nautilus -d 5
Seo
En effet, ça marche maintenant 😃
Merci ^^
Chrisnaps
le -d , c'est pour le temps d'attente avec de faire adesklets --nautilus, tu peux essayé sans si tu veux. si tu mets 5, il va attendre 5 secondes avant de redemarrer ...
Chrisnaps
J'essaye de mettre la charge de la batterie ainsi que la temp du proc (c'est un portable).
J'ai changé mon fichier : config.txt, il a l'air ok (j'ai repris une conf sur le topic et changé les liens pour pointer vers les bons fichiers 😉 )
Par contre, quand je lance le test, j'ai cette erreur :
" return acpi_data
NameError: global name 'acpi_data' is not defined"
Voila mon SystemMonitor.py :
def parseFile(self, file):
acpi_file = open(file, "r")
acpi_lines = acpi_file.readlines()
acpi_file.close()
acpi_data = {}
for line in acpi_lines:
tmp = line.split(':')
key, value = tmp[0].strip(), tmp[1].strip()
acpi_data[key] = value
return acpi_data
Pourtant l'acpi_data à bien l'air déclaré, vous avez une idée ?
gadjou
met une tabulation devant "return acpi_data"
Chrisnaps
C'est top merci 🙂 la tab a résolue le problème 😉
Par contre, avec la batterie j'ai cette erreur :
File "./SystemMonitor.py", line 997, in create
info = self.parseFile(self.info_file)
AttributeError: 'BatteryMeter' object has no attribute 'parseFile'
Qu'est ce qu'il faut que je change dans le code pour que ca fonctionne ?
(l'extrait du config.txt)
('BatteryMeter',
{'horizontal padding': 8,
'icon': 'images/icons/battery.png',
'info_file': '/proc/acpi/battery/BAT0/info',
'krell': 'images/shared/krell_green.png',
'label': '',
'meter font name': 'VeraBd',
'meter font size': 8,
'state_file': '/proc/acpi/battery/BAT0/state',
'trough': 'images/shared/trough.png',
'update_speed': 10,
'vertical padding': 8})],
Le SystemMonitor.py
# Read battery information and display a meter showing charge
class BatteryMeter (ACPIMeter):
"""Meter battery charge"""
def create(self, location, basedir, config_dictionary):
self.state_file = config_dictionary["state_file"]
self.info_file = config_dictionary["info_file"]
info = self.parseFile(self.info_file)
self.capacity = float(info["design capacity"].split()[0])
config_dictionary["base text"] = ("Battery "+config_dictionary["label"],)
config_dictionary["value text length"] = (12,)
AbstractMeter.create(self, location, basedir, config_dictionary)
def getMeterValues(self):
state = self.parseFile(self.state_file)
if (state["present"] != "yes"):
return [0.0,], ["not present",]
text_value = state["charging state"]
krell_value = float(state["remaining capacity"].split()[0])/self.capacity
return [krell_value,], [text_value,]
Merci de votre aide 🙂
gadjou
Vérifie bien tes tabulation 🙂
Python organise sa structure sur les tabulation (l'équivalent des {} en c ou java, ou "begin/end" en pascal si tu connais). Donc celle ci sont très importante et ne sont pas là pour faire joli.
je n'ai pas le fichier devant les yeux, mais tu devrais avoir quelques chose du genre:
class BatteryMeter (ACPIMeter):
def create(self, location, basedir, config_dictionary):
du code....
def getMeterValues(self):
du code....
def parseFile(self, file):
du code...
Chrisnaps
Merci 🙂 je comprends mieux pourquoi il y a des tab (je connais un peu le java)
Par contre, toutes les tab sont niquelles, les chemins pointent bien vers des fichiers existants, j'ai l'impression qu'il arrive pas à lire les fichiers, alors que les droits sont ok, que acpi-battery0.0.3 fonctionne sans aucun problème.
gadjou
AttributeError: 'BatteryMeter' object has no attribute 'parseFile'
Apparement, c'est une erreur python pure (il ne trouve pas la méthode parseFile de l'objet BatteryMeter). Peux tu publier ton fichier python complet (entre les balise "code")
Chrisnaps
Voila une partie de mon fichier SystemMonitor.py (la partie concernant l'acpi)
Pour la version complète, il fait un peu plus de 1000 lignes, donc ...
class ACPIMeter (AbstractMeter):
"""Abstract ACPI meter for all ACPI related monitoring"""
def create(self, location, basedir, config_dictionary):
self.file = config_dictionary["file"]
AbstractMeter.create(self, location, basedir, config_dictionary)
## def parseFile(self, file):
## acpi_data = {}
## acpi_file = open(file, "r")
## acpi_lines = acpi_file.readlines()
## acpi_file.close()
## acpi_lines = map(strip, acpi_lines)
##
## for line in acpi_lines:
## [key, value] = split(":\s+", line)
## acpi_data[key] = value
def parseFile(self, file):
acpi_file = open(file, "r")
acpi_lines = acpi_file.readlines()
acpi_file.close()
acpi_data = {}
for line in acpi_lines:
tmp = line.split(':')
key, value = tmp[0].strip(), tmp[1].strip()
acpi_data[key] = value
return acpi_data
# Read battery information and display a meter showing charge
class BatteryMeter (ACPIMeter):
"""Meter battery charge"""
def create(self, location, basedir, config_dictionary):
self.state_file = config_dictionary["state_file"]
self.info_file = config_dictionary["info_file"]
info = self.parseFile(self.info_file)
self.capacity = float(info["design capacity"].split()[0])
config_dictionary["base text"] = ("Battery "+config_dictionary["label"],)
config_dictionary["value text length"] = (12,)
AbstractMeter.create(self, location, basedir, config_dictionary)
def getMeterValues(self):
state = self.parseFile(self.state_file)
if (state["present"] != "yes"):
return [0.0,], ["not present",]
text_value = state["charging state"]
krell_value = float(state["remaining capacity"].split()[0])/self.capacity
return [krell_value,], [text_value,]
# get CPU temperature information and display in a meter
class TemperatureMeter (ACPIMeter):
# """Temperature Meter"""
def create(self, location, basedir, config_dictionary):
config_dictionary["base text"] = ("Temperature",)
config_dictionary["value text length"] = (6,)
self.max_temp = config_dictionary["max_temp"]
ACPIMeter.create(self, location, basedir, config_dictionary)
def getMeterValues(self):
data = self.parseFile(self.file)
text_value = data["temperature"]
krell_value = float(data["temperature"].split()[0])/self.max_temp
return [krell_value,], [text_value,]
J'ai aussi une erreur pour la température, mais je verrai plus tard 😉
gadjou
Si les tabulation sont respectés dans ton extrait de code, essaie de décaler toute cette portion de code d'une tabulation vers la gauche (les def xxx doivent êtres alignés):
def parseFile(self, file):
acpi_file = open(file, "r")
acpi_lines = acpi_file.readlines()
acpi_file.close()
acpi_data = {}
for line in acpi_lines:
tmp = line.split(':')
key, value = tmp[0].strip(), tmp[1].strip()
acpi_data[key] = value
return acpi_data