Hej.

ich wollte ganz gern von meinem System mitgeteilt bekommen wann Updates für meine installierten Pakete kommen. Ich hab das lange Zeit per 'pacman -Qu' gemacht, das war für mich genug. Da ich nun aber bei einigen Leuten noch Arch installierte, und die irgendwie nicht daran gewöhnt sind das System zu fragen, musste was neues her. Ich habe dann mal gesucht (auch im AUR), aber nichts davon gefiel mir so wirklich. Da die Updates per cronjob heruntergeladen werden brauchte ich ja wirklich nur etwas das 'pacman -Qu' ausführt und das Ergebnis nett anzeigt.
Lösung:
pacnotify
das script:
#!/bin/sh
. /home/$USER/.config/pacnotify/config
while [ true ]
 do
  sleep $updateinterval && notify-send Pacnotify "`/usr/bin/pacman -Qu`" -t $showinterval
 done
/home/$USER/.config/pacnotify/config:
#updateinterval in Sekunden
updateinterval=3600
#showinterval in Millisekunden
showinterval=120000
autostartzeile in Openbox
sleep 5 && /home/$USER/.pacnotify &


es gibt noch ein installerscript, aber das ist noch nicht zu empfehlen. Benötigt wird halt irgendwas das notify-send bietet z.B. xfce4-notify.

Todo
  • auf IgnorePkg in /etc/pacman.conf schauen und das dann ausschließen.
  • installer optimieren
11 Tage später
Hey,

schöne Sache!

Ich habe bisher etwas ähnliches mit Conky geregelt. Unter Anderem mit maximal anzuzeigender Paketanzahl... ich werde mal dein pacnotify mit meinem Skript etwas aufbohren 🙂


Gruß
[update:]
Sieht alles viel schöner aus wenn man statt:
`/usr/bin/pacman -Qu`
`/usr/bin/pacman -Qqu`
nimmt. Also schöner im Sinne von die Versionsnummern bleiben weg. Dann lassen sich auch IgnorePKGs rausfiltern.
mannohneschuh schriebDa die Updates per cronjob heruntergeladen werden brauchte ich ja wirklich nur etwas das 'pacman -Qu' ausführt und das Ergebnis nett anzeigt.
Wieso eigentlich nicht einfach das notify-send in den cronjob mit hineinpacken?

Nachtrag: Das war wohl eine dumme Frage, Antwort: Weil es dann nicht funktioniert. Warum, liegt wohl in den tieferen Geheimnissen dieses notify-Krams begründet.
maltem schriebWarum, liegt wohl in den tieferen Geheimnissen dieses notify-Krams begründet.
Blame DBus.
Creshal schrieb
maltem schriebWarum, liegt wohl in den tieferen Geheimnissen dieses notify-Krams begründet.
Blame DBus.
Blame X11, dachte ich.
maltem schrieb
mannohneschuh schriebDa die Updates per cronjob heruntergeladen werden brauchte ich ja wirklich nur etwas das 'pacman -Qu' ausführt und das Ergebnis nett anzeigt.
Wieso eigentlich nicht einfach das notify-send in den cronjob mit hineinpacken?

Nachtrag: Das war wohl eine dumme Frage, Antwort: Weil es dann nicht funktioniert. Warum, liegt wohl in den tieferen Geheimnissen dieses notify-Krams begründet.
schonmal
sudo -u "username" notify-send ....
probiert?
Blame DBus, weil es dafür keine X11-Authorisierung zu brauchen hat. Wofür hat das Zeug bitte sonst ne völlig instransparente, nicht zu debuggende Client-Server-Struktur?

@Evolis2k2: Tuts auch nicht. Muss vom selben TTY mit korrektem X11-Environment gestartet werden. Warum auch immer.
15 Tage später
Openbox nutzt doch GTK, oder nicht?

In diesem Fall hielte ich es für einfacher das 'Notifying' mit Zenity zu realisieren
Neuromatic schriebOpenbox nutzt doch GTK, oder nicht?

In diesem Fall hielte ich es für einfacher das 'Notifying' mit Zenity zu realisieren
Openbox nutzt nicht gtk, zudem ist libnotify eine Abhängigkeit von zenity, hat also wesentlich weniger Abhängigkeiten, libnotify benötigt nicht einmal gtk.
12 Tage später
Ich brauchte neulich notify-send aus cron heraus und habe dabei das hier gefunden. Kann man sich ja dann für den Zweck usw. zurechtdengeln. Statt sudo -u "username" habe ich allerdings su username -c benutzt für falls man kein sudo hat.

edit:link aktualisiert
portix schrieb
Neuromatic schriebOpenbox nutzt doch GTK, oder nicht?
In diesem Fall hielte ich es für einfacher das 'Notifying' mit Zenity zu realisieren
Openbox nutzt nicht gtk, zudem ist libnotify eine Abhängigkeit von zenity, hat also wesentlich weniger Abhängigkeiten, libnotify benötigt nicht einmal gtk.
Außerdem muss man da dann was klicken. So ein notify-Fenster kann man einfach so auslaufen lassen.
Dings schriebIch brauchte neulich notify-send aus cron heraus und habe dabei das hier gefunden. Kann man sich ja dann für den Zweck usw. zurechtdengeln. Statt sudo -u "username" habe ich allerdings su username -c benutzt für falls man kein sudo hat.
Guter Tip.
Ich denke ich bevorzuge trotzdem weiterhin die Variante ohne cron um die Nachricht zu senden. weil:
  • ist portabel
  • läuft im selben Kontext wie der User der es startet
  • unabhängig von DE/WM (funktioniert hier mit awesome)
  • vom User einfach zu deaktivieren (cih will keinem von meinen Leuten erklären müssen wie man irgendeinen Eintrag aus ner Crontab nimmt)
Evolis2k2 schrieb[…] Unter Anderem mit maximal anzuzeigender Paketanzahl... ich werde mal dein pacnotify mit meinem Skript etwas aufbohren 🙂
Magst du mal zeigen was dabei rumgekommen ist?
24 Tage später
mannohneschuh schrieb
Evolis2k2 schrieb[…] Unter Anderem mit maximal anzuzeigender Paketanzahl... ich werde mal dein pacnotify mit meinem Skript etwas aufbohren 🙂
Magst du mal zeigen was dabei rumgekommen ist?
Würde mich auch interessieren! 🙂
Hi,

ich habe inzwischen das Skript bei mir wieder runtergeschmissen, da ich 1x täglich die Updates installiere...

Aber hier ist noch der restliche Quellcode, den ich euch geben kann:
#!/bin/bash
while [ true ]
 do
	pacman -Qu > /home/$USER/.pmupdate
	if [ -n "`head -1 /home/$USER/.pmupdate`" ]; then
		ANZAHL_PAKETE=`cat /home/$USER/.pmupdate | wc -l`
		if [ $ANZAHL_PAKETE -gt 4 ]; then
		PAKETE=`cat /home/$USER/.pmupdate`
		echo  "$PAKETE" | head -4 > /home/$USER/.pmupdate
		echo "..." >> /home/$USER/.pmupdate
		fi;
		echo "$ANZAHL_PAKETE Update(s) vorhanden." >> /home/$USER/.pmupdate
		notify-send "Pacman Updates" "`cat /home/$USER/.pmupdate`" -i "/home/$USER/.icons/archlinux.svg" -t 10000
	fi;
	sleep 3600
done;
exit;
Ich bin mir aber nicht mehr sicher, ob es 100% fehlerfrei lief...

Gruß
geklaut von aarchup (AUR)
su - <USER> -c "XAUTHORITY=/home/<USER>/.Xauthority DISPLAY=:0.0 /path/to/notify-script"
und das sollte funktionieren, denke ich
3 Monate später
Na das ist ja wirklich mal ein tolles und simples Script.

Werde es wohl jetzt gegen Kalu tauschen, welches ich bisher nur zur Benachrichtigung von Updates genutzt habe, weil ich sonst einfach nichts andere gefunden habe und mir es (derzeit) noch an Erfahrung mangelt, um so ein Script (wie deines) selbst zu erstellen. Aber nur zur Benachrichtigung war Kalu dennoch schon "etwas oversized" 😉, weswegen ich schon länger nach etwas simplem und einfachem suche.

Deswegen auf diesem Wege mal Vielen Dank für dein Script!
5 Tage später
  • [gelöscht]

Schön das es gefällt.
Prinzipiell ja nicht nötig, aber ich überlege obs sinnvoll ist das ganze in cpp oder einer anderen netten Sprache zu schreiben und es dann mal im AUR anzubieten… hab ich im moment nur nicht so viel zeit zu.
bin auch für verbesserungsvorschläge offen: https://code.google.com/p/pacnotify/issues/list
9 Tage später
  • [gelöscht]

Ich glaub es lebt. AUf jeden Fall wirds immer größer. Neu:
  • Prüfen ob pacman läuft (das kann unter bestimmten Umständen zu falschen Angaben führen)
  • Prüfen ob pacnotify breits läuft (nervt wenn man plötzlich drei oder 4 Meldungen bekommt)
    • dooferweise hab ich noch nicht raus wie man dem script nen Exitbefehl sendet welcher auch die lock-file wieder entfernt
  • delay falls pacman läuft
  • nur 9 Pakete anzeigen ( beim 10. gabs immer komische Formatierungsfehler)
    • Anzahl der nicht angezeigten Pakete wird angezeigt
mannohneschuh_off schrieb dooferweise hab ich noch nicht raus wie man dem script nen Exitbefehl sendet welcher auch die lock-file wieder entfernt
Schreib die pid ins lock-file und fange dann SIGTERM im Skript ab, ein kleines Beispiel:
#!/bin/bash

LOCKFILE="/tmp/foo.lock"

echo $$ > "$LOCKFILE"
trap "rm $LOCKFILE; exit" TERM

while :; do 
    sleep 1
done
Wenn du dem Skript mit
kill $(< /tmp/foo.lock)
SIGTERM sendest dann entfernt es die Lockdatei und beendet sich. Wenn du noch mehr Aufräumarbeiten machen willst würde es sich anbieten das alles in eine Funktion zu packen, wichtig ist nur dass du exit im trap-handler ausführst weil sich das skript sonst nicht beendet. Mit trap kannst du auch noch andere Signale abfangen.