Je souhaite que mon ordinateur diffuse un fichier son personnalisé lorsque ma batterie est faible (disons 10%). Comment puis-je faire ceci? Merci
Je voulais juste répondre car j'ai utilisé les conseils de cette page pour configurer mon propre travail crontab -e
.
Je suis Lubuntu (fidèle) et ce qui précède n'a pas fonctionné pour moi, mais avec un peu de peaufinage, cela a fonctionné. Mon niveau d'expérience est que je suis relativement capable de lire des scripts et des commandes de base, mais moins capable de les écrire à partir de zéro dans une disto de Linux. Je le mentionne parce que si je peux bricoler une alarme de batterie qui fonctionne, la plupart d’entre vous qui lisez ceci devraient pouvoir le faire aussi!
SO .... le script et une explication de base ....
Selon les messages ci-dessus de Glutanimate et Scott Goodgame (merci les gars!), J’ai essentiellement fait ce qui suit:
Pour obtenir mpg123 et pouvoir lire de l'audio:
Sudo apt-get install acpi mpg123
Fichier à ouvrir pour écrire la commande:
crontab -e
Commande à entrer à la fin du fichier:
*/1 * * * * if [ `acpi -b | awk ' { print ( $(NF-2)-0)}'` -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi
astérisques au début
Les cinq astérisques représentent la fréquence à laquelle exécuter les commandes.
*/1 * * * *
signifie "exécuter ceci chaque minute".
IF/THEN/FI:
IF [ stuff inside these brackets ] ; THEN do something ; FI
J'imagine que la plupart d'entre vous connaissent très bien les déclarations IF/THEN. L'IF à la fin conclut la déclaration de l'IF
Lecture audio:
mpg123 /home/andy/Alarm.mp3
ceci utilise simplement mpg123
pour lire un fichier appelé Alarm.mp3
situé dans mon répertoire personnel /home/andy/
.
Info sur la batterie de sortie:
acpi -b
cela sort simplement l'état de la batterie. Sur mon ordinateur portable, cela donne des résultats tels que:
Battery 0: Discharging, 74%, 02:35:18 remaining
Pipe to awk command
| awk ' { print ( $(NF-2)-0)}'` -lt "15"
Très bien, nous sommes en train d'ajuster la sortie de l'état de la batterie ci-dessus et print ing la valeur de second de la fin (NF-2) qui, dans l'exemple ci-dessus est '74% '. Cependant, nous devons supprimer le "pourcentage" -. Nous voulons comparer la valeur actuelle avec la valeur 15 - lt "15". Donc, pour résumer en anglais clair,
SI la valeur de la batterie est INFÉRIEURE À 15% ALORS lire un fichier audio
Je comprends que je l'ai un peu simplifié et que mon explication pourrait peut-être être améliorée, mais j'espère que cela aidera quelqu'un d'autre à comprendre comment ajouter une alarme pour la batterie et éviter que leurs ordinateurs portables ne s'éteignent tout d'un coup!
Bonne chance!
Ok ... alors il se trouve que lorsque mon ordinateur portable est en charge, la sortie de
acpi -b
est:
Battery 0: Charging, 35%, 01:04:08 until charged
alors que sur batterie est
Battery 0: Discharging, 36%, 01:22:36 remaining
donc en utilisant le paramètre mentionné initialement de
print ( $(NF-2)-0)
génère des résultats différents, car rappelez-vous que le bit NF - spécifie le nombre d'éléments à afficher à partir de la fin de la sortie à afficher, donc avec la sortie sur batterie de
Battery 0: Discharging, 36%, 01:22:36 remaining
$(NF-2)
affiche '36% 'alors que l'ordinateur portable est en charge,
Battery 0: Charging, 35%, 01:04:08 until charged
$(NF-2)
renvoie '00: 50: 12 ', c'est-à-dire le temps qu'il reste avant la charge.
Le -0
après $(NF-2)
réduit le zéro de la valeur. Ainsi, lorsque la valeur correspond à un pourcentage, -0
le change de quelque chose comme '36% 'à' 36 '. Lorsque la valeur de sortie est perçue comme non numérique, telle que la sortie temporelle de '01: 04: 08 'comme ci-dessus, la valeur -0
return est égale à' 0 '. Vous voyez donc mon problème: lorsque mon ordinateur portable est en charge, la valeur de sortie est toujours "0". Puisque je veux jouer une alarme lorsque la valeur de sortie est inférieure à 15, cela se traduit par une alarme de batterie qui se déclenche toutes les minutes lorsqu'elle est en charge!
J'ai lu un peu plus sur la sortie de la commande awk
et il s'avère que je n'avais pas besoin de lui faire lire la deuxième valeur à la fin, je pouvais commencer au début de la sortie et avancer. C’est beaucoup mieux car mon état de batterie commence toujours de la même manière, qu’il s’agisse de charge ou de batterie, c’est-à-dire que le quatrième paramètre à partir du début est toujours la valeur de charge en pourcentage.
SO ... pour lui faire lire la quatrième valeur, la commande change de
awk ' { print ($(NF-2)-0)}'
à
awk ' { print ($4)-0}'
ou dans toute sa gloire:
*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'` -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi
Encore une fois j'espère que cela aide quelqu'un! Bonne chance et merci pour la lecture!
D'accord, alors un peu plus de temps à fouiller et j'ai aussi trouvé comment régler le volume à 100% et réactiver le son avant de sonner l'alarme - car avouons-le, à quoi sert une alarme de batterie si vous ne pouvez pas l'entendre, Avez-vous réglé le volume sur bas ou en sourdine?!
Quoi qu'il en soit, la commande dont vous avez besoin est la suivante:
*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'` -lt "15" ] ; then pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 && mpg123 /home/andy/Alarm.mp3 ; fi
comme vous pouvez le constater, tout ce que j'ai fait est d'insérer la chaîne de commande
pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 &&
(les &&
'lient simplement plusieurs commandes ensemble)
Encore une fois, bonne chance à tous!
Ok, donc ... une dernière (espérons!) Modification ... apparemment, le signe de pourcentage est un signe spécial lors de l'exécution de tâches cron. Par conséquent, vous devez "échapper" au signe de pourcentage en mettant une barre oblique inversée (\
) devant chaque %
afin qu'il ne soit pas (mal) interprété par le shell.
Donc, fondamentalement, remplacer
100%
avec
100\%
Par conséquent, la commande dont vous avez VRAIMENT besoin est la suivante:
*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'` -lt "15" ] ; then pactl set-sink-volume 0 100\% && pactl set-sink-mute 0 0 && mpg123 /home/andy/Alarm.mp3 ; fi
ouf j'espère que ça trie pour vous comme il l'a fait pour moi !! (finalement!)
Vous pouvez configurer une tâche cron qui vérifie l’état de la batterie toutes les 5/10 minutes, puis en fonction du pourcentage de la batterie, un son sera émis.
Pour jouer le son, vous pouvez utiliser
mpg123
filename.mp
Pour l'installer
Sudo apt-get install mpg123
Pour obtenir l'état de la batterie à partir de la ligne de commande, vous pouvez utiliser cette commande
upower -i /org/freedesktop/UPower/devices/battery_BAT0
en utilisant grep
vous pouvez extraire les informations exactes comme suit
upower -i /org/freedesktop/UPower/devices/battery_BAT0| grep -E "state|to\ full|percentage"
Maintenant, vous pouvez mettre toutes ces choses dans un script Shell (et aussi une condition if
pour vérifier si l'état de la batterie est inférieur à 10%) et simplement donner le chemin de ce script Shell à la tâche.
ainsi, toutes les 5 minutes (vous pouvez modifier cet intervalle), l'état de votre batterie sera vérifié et, si la batterie est inférieure à 10%, votre fichier son fourni sera lu!
J'espère que cela t'aides!
Une méthode simple consiste à ajouter une vérification simple à votre crontab (cron est un système permettant d’exécuter des tâches sur une base régulière définie par l’utilisateur en arrière-plan).
Vous devez d’abord installer un lecteur mp3 en ligne de commande et acpi pour pouvoir lire l’état de la batterie.
À partir d’un terminal, exécutez la procédure suivante pour installer les packages.
Sudo apt-get install acpi mpg123
Ensuite, toujours dans le terminal, tapez crontab -e
et entrez les informations suivantes à la fin du fichier. Changez simplement l’utilisateur en votre nom d’utilisateur et le fichier .mp3 en votre nom de fichier dans votre répertoire personnel.
*5 * * * * if [ `acpi |awk '{print substr($NF, 0, length($NF)-1)}'` -lt "10" ] ; then mpg123 /home/user/SuperCoolSound.mp3 ;fi
Appuyez sur Ctrl + O (la lettre) et sur Entrée pour enregistrer. Hit Control-x pour quitter
Des choses supplémentaires que vous voudrez peut-être lire ...
En fait, j'ai utilisé la réponse de Andy Pyne mais cela n'a pas fonctionné pour moi. Le cron a exécuté le code, mais il n'a pas joué le son. Enfin, j'ai trouvé la solution et la partage ici:
Étape 1: Installez mpg3
Sudo apt-get install acpi mpg123
Étape 2: Enregistrez la commande suivante dans ~/bin/battery_alert
#!/bin/bash
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
if [ `acpi -b | awk ' { print ($3)}'` == "Discharging," ] ; then
# Discharging
# Monitor for low battery
if [ `acpi -b | awk ' { print ($4)-0}'` -le "15" ] ; then
pactl set-sink-volume 0 75\% && pactl set-sink-mute 0 0 && mpg123 /home/user/battery_low.mp3 ;
fi
else
# Charging
if [ `acpi -b | awk ' { print ($4)-0}'` -eq "100" ] ; then
# Fully charged
pactl set-sink-volume 0 75\% && pactl set-sink-mute 0 0 && mpg123 /home/user/battery_full.mp3 ;
fi
fi
Ce script lit battery_low.mp3 si l'ordinateur portable se décharge et si la charge est inférieure ou égale à 15%. (Si le courant alternatif est connecté, il ne vous alertera pas). Ce code vous avertit également si la charge est de 100%. Si vous ne voulez pas d'alerte pour l'état complètement chargé, supprimez la partie else de ce code.
Étape 3: Rendez le fichier exécutable à l'aide de la commande suivante.
chmod +x ~/bin/battery_alert
Étape 4: Exécutez ce fichier à l'aide de cron en ajoutant la commande suivante à la fin du fichier ouvert par la commande crontrab -e
.
*/5 * * * * /home/user/bin/battery_alert
(N'oubliez pas d'avoir une ligne vide après cette commande)