web-dev-qa-db-fra.com

Définir l'imprimante par défaut en fonction de l'IP

Configuration:

J'utilise mon ordinateur portable à deux endroits. À chaque emplacement, l'ordinateur reçoit une adresse IP via DHCP. Cette adresse IP dépend de l'emplacement, mais est constante pour chaque emplacement dans le temps. De plus, il y a une imprimante à chaque endroit.

Tâche:

J'ai configuré les deux imprimantes et souhaite définir l'imprimante par défaut en fonction de l'adresse IP. À cette fin, j'ai écrit un script et l'ai placé sous /etc/network/if-up.d/set-default-printer, en utilisant lpoptions -d pour définir réellement l'imprimante par défaut.

Script:

#!/bin/sh

ip_A="1.1.1.1"
ip_B="2.2.2.2"

pr_A="Printer-A"
pr_B="Printer-B"


ip=$(hostname -I | cut -d " " -f 1)

if [ $ip = $ip_A ]; then 
    lpoptions -d $pr_A
    touch /home/user/A
fi

if [ $ip = $ip_B ]; then 
    lpoptions -d $pr_B
    touch /home/user/B
fi

Problème:

Malheureusement, l’imprimante par défaut n’est pas modifiée par le script (vous pouvez la vérifier via lpoptions sans autres arguments).

Diagnostics supplémentaires:

  1. Le script fonctionne lorsque je colle le contenu ou que je l'appelle simplement à partir de la ligne de commande.
  2. Le script est exécuté par le mécanisme if-up-, vérifié par la création de fichiers /home/user/(A|B).
  3. En particulier, à partir de 1 ou 2, le fichier de script lui-même est exécutable.
1
jpmath

Apparemment, la lpoptions doit être exécutée en tant qu'utilisateur local. Par conséquent, remplacer

lpoptions -d $pr

par

Sudo -H -u user lpoptions -d $pr

pour les deux imprimantes $pr résout le problème.

En supposant que user soit votre nom d'utilisateur, le script complet /etc/network/if-up.d/set-default-printer est maintenant:

#!/bin/sh

ip_A="1.1.1.1"
ip_B="2.2.2.2"

pr_A="Printer-A"
pr_B="Printer-B"


ip=$(hostname -I | cut -d " " -f 1)

if [ $ip = $ip_A ]; then 
    Sudo -H -u user lpoptions -d $pr_A
fi

if [ $ip = $ip_B ]; then 
    Sudo -H -u user lpoptions -d $pr_B
fi
0
jpmath