Une place pour une véritable innovation. Partagez vos propres utilitaires créés avec la communauté Manjaro.
Questions et discussions sur la programmation et le codage.
#1Messageil y a 10 ansBonsoir,
j'ai fait un script shell qui fonctionne parfaitement pour ce que je lui demande, mais voilà, j'ai voulu que ce script passe des messages sur son état d'avancement dans la zone de notification.
que j'utilise Notify-send ou Kdialog, mes notifications fonctionnent très bien; là où ça se complique, c'est que je programme l'utilisation de mon script avec Cron (avec Kcron sous Kde), et dans ce cas, mes notifications ne s'affichent plus (mais je sais que le script fonctionne puisqu'il fait un fichier de log).
je me suis donc fait un script de test pour trouver ce qui ne va pas:
#!/bin/sh
kdialog --passivepopup "test en situation" 5
ce qui marche en lançant le script manuellement, mais pas avec Cron; pareil avec Notify-send.
si je le fais avec Wall, ça fonctionne:
echo -e "test en situation" | /usr/bin/wall
le problème est que Wall affiche tout un tas d'infos non pertinentes à mon sens et que le message important ne se voit plus...
j'ai fini par comprendre qu'avec Cron on a un problème de display, puisque Cron travaille dans un autre terminal que celui de la session graphique, donc j'ai essayé:
#!/bin/sh
export DISPLAY=:0
kdialog --passivepopup "test en situation" 5
dans ce cas ça fonctionne, mais au lieu de s'afficher dans la zone de notification déroulante du systray de Kde comme les autres notifications, ça s'affiche dans un vilain carré gris au milieu de l'écran...
et là j'ai plus d'idée, sauf celle qu'il faudrait que j'ajoute une autre variable d'environnement, mais laquelle ?
pour voir les différences de variables d'environnement entre une session graphique et Cron, j'ai ajouté ça dans le script:
env >> /home/david/testlog.log
et à l'éxécution du script par Cron, testlog.log se remplit avec ça:
SHELL=/bin/sh
USER=david
PATH=/usr/bin:/bin
PWD=/home/david
LANG=fr_FR.UTF-8
HOME=/home/david
SHLVL=2
LOGNAME=david
BROWSER=/usr/bin/xdg-open
DISPLAY=:0
_=/usr/bin/env
ce qui est assez peu par rapport à ce qu'on obtient avec la commande "env" dans le terminal:
XDG_VTNR=1
SSH_AGENT_PID=1009
XDG_SESSION_ID=1
KDE_MULTIHEAD=false
GPG_AGENT_INFO=/tmp/gpg-Vk4IYB/S.gpg-agent:1006:1
SHELL=/bin/bash
TERM=xterm
HISTSIZE=10000
GTK2_RC_FILES=/etc/gtk-2.0/gtkrc:/home/david/.gtkrc-2.0:/home/david/.kde4/share/config/gtkrc-2.0
KONSOLE_DBUS_SERVICE=:1.79
KONSOLE_PROFILE_NAME=Terminal
GS_LIB=/home/david/.fonts
GTK_RC_FILES=/etc/gtk/gtkrc:/home/david/.gtkrc:/home/david/.kde4/share/config/gtkrc
WINDOWID=44040219
SHELL_SESSION_ID=bb86165bcb43400088c96cc517908354
GTK_MODULES=canberra-gtk-module
KDE_FULL_SESSION=true
HISTFILESIZE=10000
USER=david
SSH_AUTH_SOCK=/tmp/ssh-fyqf0u7CQinJ/agent.1008
SESSION_MANAGER=local/asusx50vl:@/tmp/.ICE-unix/1067,unix/asusx50vl:/tmp/.ICE-unix/1067
MOZ_PLUGIN_PATH=/usr/lib/mozilla/plugins
DESKTOP_SESSION=KDE Plasma Workspace
MAIL=/var/spool/mail/david
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/vendor_perl:/usr/bin/core_perl
LC_COLLATE=C
PWD=/home/david
JAVA_HOME=/usr/lib/jvm/java-7-openjdk
KONSOLE_DBUS_WINDOW=/Windows/1
KDE_SESSION_UID=1000
LANG=fr_FR.UTF-8
KONSOLE_DBUS_SESSION=/Sessions/1
HISTCONTROL=ignoreboth
HOME=/home/david
COLORFGBG=15;0
XDG_SEAT=seat0
SHLVL=3
KDE_SESSION_VERSION=4
LANGUAGE=
XCURSOR_THEME=Oxygen_White
LOGNAME=david
XDG_DATA_DIRS=/usr/share:/usr/share:/usr/local/share
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-Y8F6HW6QxY,guid=72d4028630575b95e5789624525a5547
BROWSER=/usr/bin/xdg-open
PROFILEHOME=
XDG_RUNTIME_DIR=/run/user/1000
DISPLAY=:0
QT_PLUGIN_PATH=/home/david/.kde4/lib/kde4/plugins/:/usr/lib/kde4/plugins/
XDG_CURRENT_DESKTOP=KDE
_=/usr/bin/env
mais comme je ne vais pas faire tous ces exports dans mon script, et que je ne peux pas tout tester un par un avec Cron (ajouter un export, programmer Cron pour une éxécution dans une minute, attendre...), j'aimerais bien savoir quelle(s) variable(s) d'environnement serai(en)t utile(s) pour que mes notifications s'affichent normalement...
si quelqu'un a une idée...
PS: je sais que pour un truc qui s'éxécute en différé, il n'est pas vital d'avoir des notifications, surtout que je serai pas forcément devant, mais comme on dit, c'est inutile, donc indispensable... Asus AIO - AMD E2 - Radeon HD 7340 - Manjaro 64 + Kf5 + Linux 3.14
#3Messageil y a 10 ansJ'ai testé de mon côté:
un fichier crontab
* * * * * DISPLAY=:0.0 /tmp/test_cron.sh
un fichier Bash
#!/bin/bash
DISPLAY=:0.0 /usr/bin/notify-send -t 10 Test "This is a test"
Chaque minute, la chaine de test est affichée par notify-send
[EDIT]
Ou alors avec
#!/bin/bash
DISPLAY=:0.0 /usr/bin/notify-send -t 10 Test "`date -R`"
Et date et heure s'affichent correctement #4Messageil y a 10 ansle coup du BUS_SESSION_BUS_ADDRESS, je l'ai essayé, en faisant comme ça:
#!/bin/sh
export DISPLAY=:0
if [[ -z "$DBUS_SESSION_BUS_ADDRESS" ]];
then source "$HOME/.dbus/session-bus"/*-0 && export DBUS_SESSION_BUS_ADDRESS;
fi
env >> /home/david/testlog.log
echo "test en situation" | kdialog --passivepopup "$(cat)" 5
et comme j'ai gardé mon "env >> /home/david/testlog.log", j'ai pu vérifier que c'était bien pris en compte correctement; dans mon testlog.log, j'ai bien une ligne:
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-Q091AB1jCD,guid=a2b845b9c4ccc03c2669b98f525a7f89
qui correspond bien à ce qu'il y a dans ~/.dbus/session-bus/********-0; donc avec ça, mon script reste valable même après deco-reco...
le seul truc, c'est que ça change rien: le popup s'affiche toujours dans un cadre moche au milieu de l'écran au lieu de la notif Kde quand on se sert de Cron (mais ça marche toujours normalement quand on lance en manuel).
je pense qu'il y a une variable spécifique à Kde, faut que je trouve laquelle... Asus AIO - AMD E2 - Radeon HD 7340 - Manjaro 64 + Kf5 + Linux 3.14
#5Messageil y a 10 ansJe suis sous xfce : ceci explique (peut être) cela ! #6Messageil y a 10 ansoui, et Ytterbium est sous Openbox...
j'ai Openbox installé, je vais essayer dessus pour voir. Asus AIO - AMD E2 - Radeon HD 7340 - Manjaro 64 + Kf5 + Linux 3.14
#7Messageil y a 10 ansCe qui est bizarre, c'est que moi, je n'ai pas de dossier .dbus. Je me demande pourquoi, alors que toi tu en as un. Manjaro 64 bits Net édition avec Openbox.
#8Messageil y a 10 ansquel DM utilises-tu ? Slim ou Lxdm ?
j'ai essayé sous Openbox, aucun affichage avec Notify-send, et affichage au milieu dans le cadre moche avec Kdialog (mais là c'est plutôt normal, puisque la notification Kde n'est pas là).
les variables de Kde et de Qt que j'ai essayé jusqu'à présent ont fait crasher Kdialog, et il faut que je redémarre à chaque fois car ces exports sont conservés par Cron... Asus AIO - AMD E2 - Radeon HD 7340 - Manjaro 64 + Kf5 + Linux 3.14
#9Messageil y a 10 ansLoubrix a écrit :quel DM utilises-tu ? Slim ou Lxdm ?
startx
Loubrix a écrit :j'ai essayé sous Openbox, aucun affichage avec Notify-send, et affichage au milieu dans le cadre moche avec Kdialog (mais là c'est plutôt normal, puisque la notification Kde n'est pas là).
Tu n'as aucun affichage avec notify-send, même en script "normal" ? Tu as bien le paquet xfce4-notifyd ?
Sinon, tu as testé l'option "--dsiplay" de kdialog ?Manjaro 64 bits Net édition avec Openbox.
#10Messageil y a 10 anset qu'as tu dans ton ~/.xinitrc ?
je n'ai pas testé l'option --display de Kdialog, simplement parce que cette option ne figure pas dans la seule doc locale: le --help (aucun man pour Kdialog).
mais je vais essayer ça... Asus AIO - AMD E2 - Radeon HD 7340 - Manjaro 64 + Kf5 + Linux 3.14
#11Messageil y a 10 ansUn bête :
if [ -d /etc/X11/xinit/xinitrc.d ]; then
for f in /etc/X11/xinit/xinitrc.d/*; do
[ -x "$f" ] && . "$f"
done
unset f
fi
numlockx &
exec openbox-session
Manjaro 64 bits Net édition avec Openbox.
#12Messageil y a 10 anseffectivement, tu ne lances pas de session Dbus dans ton xinitrc, mais normalement (et tu peux vérifier), il y a ce qu'il faut dans /etc/X11/xinit/xinitrc.d Asus AIO - AMD E2 - Radeon HD 7340 - Manjaro 64 + Kf5 + Linux 3.14
#13Messageil y a 10 ansEffectivement, j'ai un beau
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && type dbus-launch >/dev/null; then
eval $(dbus-launch --sh-syntax --exit-with-session)
fi
Manjaro 64 bits Net édition avec Openbox.
#15Messageil y a 10 ansje vais tester ça, parce que l'export de dbus me fait crasher Kdialog en fin de compte... Asus AIO - AMD E2 - Radeon HD 7340 - Manjaro 64 + Kf5 + Linux 3.14
#17Messageil y a 10 ansben en fin de compte, n'ayant rien trouvé de mieux, je me contente des vilaines notifications, et puis le reste fonctionne et fait ce que je lui demande... Asus AIO - AMD E2 - Radeon HD 7340 - Manjaro 64 + Kf5 + Linux 3.14