Journal Visualisation automatique d'un fichier PDF créé avec l'imprimante virtuelle cups-pdf

Posté par  . Licence CC By‑SA.
Étiquettes :
13
6
déc.
2016

Bonjour à tous,

voici un petit truc que je trouve très pratique… Si comme moi vous imprimez souvent des pages web, des documents textes, des images en PDF pour les diffuser, les archiver ou les imprimer, vous utilisez alors l'imprimante virtuelle cups-pdf (si celle-ci n'est pas disponible, il vous suffit d'installer le paquet cups-pdf).

Mais vous avez sûrement alors eu envie que le fichier généré par l'imprimante virtuelle s'ouvre aussitôt dans votre visualiseur PDF préféré (evince, okular, acroread, xpdf, etc.).

Voici comment faire, en trois étapes :

  1. Créez un script bash avec le contenu suivant :
#!/bin/bash

# Export display otherwise the PDF viewer will fail
export DISPLAY=':0.0'

# Get user name
USER=`ls -l $1 | awk '{print $3}'`

# Open default PDF viewer as user
sudo -H -u $USER "/usr/bin/xdg-open" "$1"
  1. Copiez le script dans /usr/local/bin/cups-pdf-process et donnez lui les droits d'exécution :
    sudo chmod +x /usr/local/bin/cups-pdf-process

  2. Éditez le fichier /etc/cups/cups-pdf.conf et ajoutez la ligne :
    PostProcessing /usr/local/bin/cups-pdf-process

Après cela, chaque fois que vous imprimerez avec l'imprimante virtuelle, le fichier PDF généré s'ouvrira automatiquement et votre visualiseur vous permettra d'en enregistrer une copie où vous voulez, de l'imprimer, etc.

Très pratique !

  • # Oui, mais...

    Posté par  . Évalué à 2.

    Bonjour,

    Merci :)
    Mais ça ne fonctionne que sur un desktop mono-user(et encore, sur mon laptop je suis déjà « :1 », mais ça reste configurable) .
    Sur un système partagé comme NoMachine, ça ne fonctionne pas.

    Un truc pas très joli:

    USER=`ls -l $1 | awk '{print $3}'
    
    for x in `find /tmp/.X11-unix -user $USER -printf "%f\n"`; do
    
      export DISPLAY=":${x#X}.0"
      sudo -H -u $USER "/usr/bin/xdg-open" "$1"
    
    done

    Prochaine update quand on aura du Wayland partout :P

    • [^] # Re: Oui, mais...

      Posté par  (Mastodon) . Évalué à 2.

      $ ls /tmp/.X11-unix/ -l
      total 0
      srwxrwxrwx 1 root root 0 nov.  25 21:42 X0
      

      Le serveur X est lancé par root.
      Parce que le serveur X est lancé par xdm/kdm/gdm/sddm/lxdm/lightdm lui-même lancé en root.

      Yth.

      • [^] # Re: Oui, mais...

        Posté par  . Évalué à 0.

        Du coup, comment faire ?

        Ici, NoMachine lance avec les droits utilisateurs.

        Sur mon laptopn(gdm/gnome3 sous archlinux) j'ai:

        srwxrwxrwx 1 gdm      gdm  0  2 déc.  10:35 X0
        srwxrwxrwx 1 me        uucp  0  2 déc.  10:35 X1
        

        @yth un « who » te donne quoi, juste par curiosité ?

        Chez moi:

        % who
        me tty2         2016-12-02 10:35 (:1)
        
        • [^] # Re: Oui, mais...

          Posté par  (Mastodon) . Évalué à 3.

          $ who
          yth    :0           2016-11-25 21:43
          

          Ça marche ça !

          Yth :)

    • [^] # Re: Oui, mais...

      Posté par  . Évalué à 2.

      ls et awk pour récupérer le nom d'utilisateur. Ok! ca marche mais c'est un peu bourrin :-)

      Il existe une commande pour ce genre de requêtes sur les attributs de fichiers: stat

      stat -c %U "$1"

      • [^] # Re: Oui, mais...

        Posté par  . Évalué à 1.

        Et zut. Cela m'apprendra de ne pas lire tout les réponses.

  • # stat

    Posté par  . Évalué à 4. Dernière modification le 06 décembre 2016 à 11:21.

    USER=`ls -l $1 | awk '{print $3}'`

    Si le but de la ligne ci-dessus est de récupérer le propriétaire du PDF, ce n'est pas forcément très fiable (rien ne garantit que le propriétaire sera toujours dans la troisième colonne.)

    Il vaut mieux utiliser stat (qui, en plus, évite de recourir à un pipe) :

    USER=`stat -c %U $1`

    Après, évidemment, chacun fait comme il veut.

    • [^] # Re: stat

      Posté par  . Évalué à 1.

      Oui, c'est mieux, merci.
      C'est curieux parce que j'avais d'abord testé cette solution, qui n'avait pas marché (sans doute une coquille dans le script) et je me suis rabattu sur la solution avec ls…

      • [^] # Re: stat

        Posté par  . Évalué à 6.

        Avec une syntaxe plus moderne et une protection contre les espaces :

        USER=$(stat -c %U "$1")
    • [^] # Re: stat

      Posté par  . Évalué à 1.


      ### Key: PostProcessing (config, lptoptions)
      ## postprocessing script that will be called after the creation of the PDF
      ## as arguments the filename of the PDF, the username as determined by
      ## CUPS-PDF and the one as given to CUPS-PDF will be passed
      ## the script will be called with user privileges
      ## set this to an empty value to use no postprocessing

      du coup un simple "id" permet de récupérer l'utilisateur

      USER=$(id -un)
      • [^] # Re: stat

        Posté par  . Évalué à 1.

        Ah oui, c'est encore mieux, merci !

      • [^] # Re: stat

        Posté par  . Évalué à 1.

        Et donc, le sudo est vraiment nécessaire dans ce cas ?

        • [^] # Re: stat

          Posté par  . Évalué à 0.

          Sans le sudo -H -u, l'application utilisée pour ouvrir le PDF (par exemple evince) ne reconnaît pas le dossier utilisateur…

          Alors, si on veut enregistrer une copie du fichier et que l'on clique sur "Dossier personnel" dans le dialogue de fichier d'Evince ou autre, il ne se passe rien, alors qu'avec le sudo -H -u ça marche.

  • # Pour les documents texte

    Posté par  . Évalué à 2.

    et autres documents gérés par LibreOffice, l'export PDF (Fichier > Exporter en PDF, donc sans passer par une imprimante virtuelle) a une option qui fait exactement ça.

    • [^] # Re: Pour les documents texte

      Posté par  . Évalué à 2.

      Oui, c'est pratique quand on est déjà sous LibreOffice, mais pas quand on est dans un éditeur, sous Firefox, dans Gimp, etc.

  • # Lecteur de PDF par défaut sous debian SID

    Posté par  (site web personnel) . Évalué à 1.

    Merci pour l'astuce :)
    Mais pour moi, il ouvre le PDF avec GIMP, alors que si je clique sur un PDF dans mon gestionnaire de fichiers, il l'ouvre bien avec evince.
    Comment faire pour qu'il s'ouvre par défaut avec Evince ? (Je suis sous debian SID).

    D'ailleurs, j'ai à peu près la même question pour le navigateur par défaut. Les liens sont ouverts avec firefox ESR alors que j'utilise des versions de Firefox non ESR. Je fais comment pour changer ?

    Merci !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.