[GELÖST] Yad: Fensterposition unter Plasma-Wayland

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
humanreadable
Beiträge: 39
Registriert: 02.11.2017 13:57:38

[GELÖST] Yad: Fensterposition unter Plasma-Wayland

Beitrag von humanreadable » 22.07.2023 22:03:28

Ich habe einen Systemd-Service, der beim Systemstart nach verfügbaren Updates sucht [1] und einen User-Systemd-Service [2], der ein Bash-Skript [3] startet, das "apt list --upgradable" liest und mich über Yad benachrichtigt, wenn es Aktualisierungen gibt.
Alles funktioniert gut mit Bullseye KDE und X11.
(Übrigens benutze ich weder unattended-upgrades noch apt-daily-upgrade.service, apper, plasma-discover, etc. Ich aktualisiere manuell das System).

[1]
update.service /etc/systemd/system/update.service

Code: Alles auswählen

[Unit]
Description=Sucht nach Aktualisierungen
ConditionACPower=true
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStartPre=/usr/lib/apt/apt-helper wait-online
ExecStart=/usr/bin/apt-get -qq update
[Install]
WantedBy=multi-user.target
[2]
Benachrichtigung ~/.config/systemd/user/Benachrichtigung.service

Code: Alles auswählen

[Unit]
Description=Informiert über die Verfügbarkeit von Aktualisierungen
ConditionACPower=true
[Service]
Type=oneshot
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/<Benutzer>/.Xauthority
ExecStartPre=/bin/sleep 30
ExecStart=/bin/bash /usr/local/bin/Benachrichtigung.sh
[Install]
WantedBy=default.target
[3]
Bash-Skript /usr/local/bin/Benachrichtigung.sh

Code: Alles auswählen

#!/bin/bash

NUM=$(( $(apt list --upgradable 2>/dev/null | wc -l) - 1 ))

sleep 120

if [ $NUM -eq 0 ]; then exit
elif [ $NUM -eq 1 ]; then env DISPLAY=:0 yad --geometry=500x50-0-0 --text-align=center --title "Verfügbare Updates" --text "Ein Update ist verfügbar" 
else env DISPLAY=:0 yad --geometry=500x50-0-0 --text-align=center --title "Verfügbare Updates" --text "Es sind $NUM Updates verfügbar" 
fi
exit
Ich habe Bookworm in einer vbox mit KDE und Wayland. Der Service unter Plasma-Wayland funktioniert, aber die Position des Yad-Fensters ist falsch. Es erscheint in der Mitte des Bildschirms und nicht unten rechts wie unter Bookworm Plasma-X11 oder Bullseye.

systemctl --user status Benachrichtigung.service sagt:

Code: Alles auswählen

[…]    Process: 1117 ExecStartPre=/bin/sleep 30 (code=exited, status=0/SUCCESS)
    Process: 1597 ExecStart=/bin/bash /usr/local/bin/Benachrichtigung.sh (code=exited, status=0/SUCCESS)
   Main PID: 1597 (code=exited, status=0/SUCCESS)
        […]
  yad[1609]: gdk_x11_window_get_xid: assertion 'GDK_IS_X11_WINDOW (window)' failed
[…]
Ich habe versucht, GDK_BACKEND=x11 oder export GDK_BACKEND=X11 in das Skript oder Environment=GDK_BACKEND=x11 in Benachrichtigung.service einzufügen, aber der Service startet nicht (status=1/FAILURE) und ich erhalte immer die Fehlermeldung:

Code: Alles auswählen

yad: cannot open display: :0
und manchmal auch

Code: Alles auswählen

bash: Invalid MIT-MAGIC-COOKIE-1 key
Wie kann ich die richtige Yad-Fensterposition erhalten?
Vielen Dank im Voraus
Zuletzt geändert von humanreadable am 24.07.2023 07:53:35, insgesamt 1-mal geändert.
Deutsch ist nicht meine Muttersprache. Ich bitte um Verständnis.

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Yad: Fensterposition unter Plasma-Wayland

Beitrag von JTH » 22.07.2023 22:15:09

Ob die beiden letzten Fehlermeldungen für dein Problem entscheidend sind, kann ich dir nicht sagen.

Nur zur Option --geometry sagt die Manpage:
man yad hat geschrieben: --geometry=WIDTHxHEIGHT+X+Y
[…] This option is obsolete for gtk3 builds.
Mindestens seid Buster wird yad anscheinend für GTK-3 gebaut. Möglicherweise sollen --width, --height, --posx und --posy der Ersatz sein, die Beschreibung dazu findest du auch in der Manpage.

Code: Alles auswählen

--posx=-1 --posy=-1
scheint ein Fenster unten rechts zu positionieren, allerdings auch „nur“ unter X11 ausprobiert.
Manchmal bekannt als Just (another) Terminal Hacker.

humanreadable
Beiträge: 39
Registriert: 02.11.2017 13:57:38

Re: Yad: Fensterposition unter Plasma-Wayland

Beitrag von humanreadable » 23.07.2023 00:08:12

Vielen Dank für die Antwort.
Aber yad --width=500 --height=50 --posx=-1 --posy=-1 unter Plasma-Wayland funktioniert nicht.
Das Fenster erscheint wieder in der Mitte des Bildschirms. Sogar wenn ich es im Terminal ausführe:

Code: Alles auswählen

yad --width=500 --height=50 --posx=-1 --posy=-1 --text-align=center --title "TITEL" --text "TEXT"
(yad:1663): Gdk-CRITICAL **: 23:15:16.675: gdk_x11_window_get_xid: assertion 'GDK_IS_X11_WINDOW (window)' failed

oder
env DISPLAY=:0 yad --width=500 --height=50 --posx=-1 --posy=-1 --text-align=center --title "TITEL" --text "TEXT"
(yad:1763): Gdk-CRITICAL **: 23:34:33.968: gdk_x11_window_get_xid: assertion 'GDK_IS_X11_WINDOW (window)' failed
Aber GDK_BACKEND=X11 yad ... und env DISPLAY=:0 GDK_BACKEND=X11 yad ... funktionieren überhaupt nicht (Gtk-WARNING: cannot open display: :1 oder cannot open display: :0).
Deutsch ist nicht meine Muttersprache. Ich bitte um Verständnis.

dillo
Beiträge: 359
Registriert: 28.05.2005 19:53:56

Re: Yad: Fensterposition unter Plasma-Wayland

Beitrag von dillo » 23.07.2023 12:11:39

humanreadable hat geschrieben: ↑ zum Beitrag ↑
23.07.2023 00:08:12
Aber GDK_BACKEND=X11 yad ... und env DISPLAY=:0 GDK_BACKEND=X11 yad ... funktionieren überhaupt nicht (Gtk-WARNING: cannot open display: :1 oder cannot open display: :0).
Kleines x bei x11! also

Code: Alles auswählen

GDK_BACKEND=x11 yad ... 

humanreadable
Beiträge: 39
Registriert: 02.11.2017 13:57:38

Re: Yad: Fensterposition unter Plasma-Wayland

Beitrag von humanreadable » 24.07.2023 07:50:43

@ dillo
Danke für den Tipp.

Ich habe die Position des Yad-Fensters in der Konfiguration des Anwendungsfensters (KDE) geändert: Position -1 x -1.

Ich habe "Environment=DISPLAY=:0" und "Environment=XAUTHORITY=/home/<Benutzer>/.Xauthority" aus dem /systemd/user/Benachrichtigung.service gelöscht (Fehlermeldungen "yad: cannot open
display: :0" und "bash: Invalid MIT-MAGIC-COOKIE-1 key") (DISPLAY war manchmal =1).

Ich habe das Skript so geändert:

Code: Alles auswählen

[…] then env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY GDK_BACKEND=x11 yad --width=500 --height=50 --posx=-1 --posy=-1 […]
Jetzt funktioniert es einwandfrei.

Vielen Dank für die Hilfe.
Deutsch ist nicht meine Muttersprache. Ich bitte um Verständnis.

Antworten