Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes POSIX Discussion :

Fichier de ressources pour une application X11


Sujet :

Shell et commandes POSIX

  1. #1
    Membre confirmé
    Fichier de ressources pour une application X11
    Bonjour,
    Je cherche a définir un fichier de config spécifique pour une application X11 genre Xmessage.
    Les applications X11 lisent leurs paramètres dans app-defauts avec possibilité de leur adjoindre une customization.
    Les applications X11 lisent également le fichier $HOME/.Xresources et il y a possibilité d'être assez précis en définissant un nom avec l'option -name.
    Les applications X11 acceptent également l'option -xrm permettant de définir des paramètres en ligne de commande et spécifiques a la commande.
    C'est dans cette direction que je cherche, via -xrm ou une autre option qui m'aurait échappée, car je voudrais un fichier de ressources ponctuel que je pourrais transporter avec mon script.
    Exemple avec une boite de message affichant un pixmap.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #!/bin/sh
    xmessage -buttons '' \
             -timeout 5 \
             -xrm 'xmessage.maxHeight: 48' \
             -xrm 'xmessage.minHeight: 48' \
             -xrm 'xmessage.form.Thickness: 0' \
             -xrm 'xmessage.form.message.background: yellow' \
             -xrm 'xmessage.form.message.scrollVertical: true' \
             -xrm 'xmessage.form.message.scrollHorizontal: false' \
             -xrm 'xmessage.form.message.topMargin: 10' \
             -xrm 'xmessage.form.message.leftMargin: 50' \
             -xrm 'xmessage.form.message.rightMargin: 50' \
             -xrm 'xmessage.form.message.cursorName: left_ptr' \
             -xrm 'xmessage.form.message*Translations: #override <BtnDown>: ' \
             -xrm 'xmessage.form.message*font: -*-helvetica-*-*-*-*-25*' \
             -xrm 'xmessage.form.message.textSink.foreground: magenta' \
             -xrm 'xmessage.form.message.Scrollbar.borderPixmap: /usr/share/pixmaps/xterm-color_48x48.xpm' \
             -xrm 'xmessage.form.message.Scrollbar.borderWidth: 48' \
             -xrm 'xmessage.form.message.Scrollbar.scrollDCursor: left_ptr' \
             -xrm 'xmessage.form.message.Scrollbar.scrollUCursor: left_ptr' \
             -xrm 'xmessage.form.message.Scrollbar.scrollVCursor: left_ptr' \
             -xrm 'xmessage.form.message.Scrollbar.width: 1' \
             "Magnifique message avec icon" &

    Toutes les lignes avec -xrm seraient dans un fichier ressources.
    Mon script deviendrait alors quelquechose de bien plus simple.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/sh
    xmessage -buttons '' \
             -timeout 5 \
             -xrm ou l'option qui va bien 'xmessage.fichier de ressource: MonFichier' \
             "Magnifique message avec icon" &

    Une idée ?
    Merci.

  2. ###raw>post.musername###
    Expert éminent sénior
    Bonjour

    mes_ressources.txt
    xmessage.maxHeight: 48
    xmessage.minHeight: 48
    xmessage.form.Thickness: 0
    xmessage.form.message.background: yellow
    xmessage.form.message.scrollVertical: true
    xmessage.form.message.scrollHorizontal: false
    xmessage.form.message.topMargin: 10
    xmessage.form.message.leftMargin: 50
    xmessage.form.message.rightMargin: 50
    xmessage.form.message.cursorName: left_ptr
    xmessage.form.message*Translations: #override <BtnDown>:
    xmessage.form.message*font: -*-helvetica-*-*-*-*-25*
    xmessage.form.message.textSink.foreground: magenta
    xmessage.form.message.Scrollbar.borderPixmap: /usr/share/pixmaps/xterm-color_48x48.xpm
    xmessage.form.message.Scrollbar.borderWidth: 48
    xmessage.form.message.Scrollbar.scrollDCursor: left_ptr
    xmessage.form.message.Scrollbar.scrollUCursor: left_ptr
    xmessage.form.message.Scrollbar.scrollVCursor: left_ptr
    xmessage.form.message.Scrollbar.width: 1
    
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    sed 's/^/-xrm "/;s/$/" \\/; 1s/^/xmessage -buttons "" -timeout 5 \\\n/; $s/$/\n"Magnifique message avec icon"/' mes_ressources.txt | bash -


    Tu n'as pas parlé de xrdb pour ajouter tes ressources à la base.
    Tu n'as pas parlé non plus de la variable d'environnement XENVIRONMENT qui peut charger un fichier spécifique.

    Citation Envoyé par https://www.oreilly.com/library/view/x-window-system/9780937175149/Chapter09.html
    Other Sources of Resource Definition

    If xrdb has not been run, the RESOURCE_MANAGER property will not be set. Instead, the resource manager looks for a file called .Xdefaults in the user’s home directory. As we discussed earlier, resources found in this way are only available to clients running on the local machine.

    Whether or not resources have been loaded with xrdb, when a client is run the following sources of resource definition are consulted in this order:

    1. A file with the same name as the client application, in the directory /usr/lib/X11/appdefaults will be loaded into the resource manager.

    2. Files in the directory named by the environment variable XAPPLRESDIR, or if the variable is not set, in the user’s home directory, with the name Class where Class is the class name of a client program.

    3. Resources loaded into the RESOURCE_MANAGER property of the root window with xrdb; these resources are accessible regardless of the machine on which the client is running.

    If no resources are loaded in this way, the resource manager looks for a .Xdefaults file in the user’s home directory; these resources are only available on the local machine.

    4. Next, the contents of any file specified by the shell environment variable XENVIRONMENT will be loaded.

    If this variable is not defined, the resource manager looks for a file named .Xdefaults-hostname in the user’s home directory, where hostname is the name of the host where the client is running. These methods are used to set machine-specific resources.

    5. Any values specified on the command line with the -xrm option will be loaded for that instance of the program.

    All of these various sources of defaults will be loaded and merged, according to the precedence rules described above in the section “Precedence Rules for Resource Specification.”

    The client will then merge these various defaults specified by the user with its own internal defaults, if any.

    Finally, if the user has specified any options on the command line (other than with the -xrm option), these values will override those specified by resource defaults, regardless of their source.
      1  0

  3. #3
    Membre confirmé
    Merci pour ces infos et merci pour le sed que je n'ai pas essayé car je me dit que 6 mois plus tard, j'aurais du mal à comprendre le problème.
    Un peu de lecture des pages de man, ça fait pas de mal !
    Dans ma tête, xrdb permettais d'ajouter des paramètres, option -merge, mais en fait, xrdb est beaucoup plus puissant que ça.
    Il est possible de sauvegarder la config via -edit,
    Installer une nouvelle config via -load puis réinstaller l'ancienne config via -load également.
    Mon script devient :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/sh
    xrdb -edit /tmp/old_res
    xrdb ./Xsetup_0.res
    xmessage -buttons '' \
             -timeout 5 \
             "Magnifique message avec icon" &
    sleep 6
    xrdb /tmp/old_res
    rm /tmp/old_res
    xmessage -timeout 5 \
             -xrm 'xmessage.form.message*font: -*-helvetica-*-*-*-*-25*' \
             'Petite visu de ce que pense https://forum.openbsd.fr.eu.org' &
    sleep 6
    exo-open https://forum.openbsd.fr.eu.org/showthread.php?tid=2663#pid21067 &

    La variable d'environnement XENVIRONMENT a ma préférence.
    Mon script devient :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/sh
    export XENVIRONMENT=./Xsetup_0.res
    xmessage -buttons '' \
             -timeout 5 \
             "Magnifique message avec icon" &
    sleep 6
    unset XENVIRONMENT
    xmessage -timeout 5 \
             -xrm 'xmessage.form.message*font: -*-lucida-*-*-*-*-34*' \
             'Petite visu de ce que pense https://forum.openbsd.fr.eu.org' &
    sleep 6
    exo-open https://forum.openbsd.fr.eu.org/showthread.php?tid=2663#pid21067 &

    La dernière ligne ne fonctionne certainement que sur xfce mais permet de voir ce qu'en pense les autres.
    Il y aurait peut être moyen de spécifier que ces tutoriels sont obsolètes.
    En tous cas, merci pour ces pistes très efficaces.

###raw>template_hook.ano_emploi###