Definir impressora padrão de acordo com o IP

1

Configuração:

Eu uso meu notebook em dois locais. Em cada local, o computador recebe um endereço IP via DHCP. Esse endereço IP depende da localização, mas é constante para cada local ao longo do tempo. Além disso, em cada local há uma impressora.

Tarefa:

Eu configurei ambas as impressoras e gostaria de definir a impressora padrão de acordo com o IP. Para esse propósito, eu escrevi um script e coloquei em /etc/network/if-up.d/set-default-printer , usando lpoptions -d para definir a impressora padrão.

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

Problema:

Infelizmente, a impressora padrão não é alterada pelo script (pode ser verificada via lpoptions sem mais argumentos).

Mais diagnósticos:

  1. O script funciona quando eu colo o conteúdo ou simplesmente o chamo na linha de comando.
  2. O script é executado pelo if-up -mechanism, que é verificado pela criação dos arquivos /home/user/(A|B) .
  3. Em particular, seguindo de 1 ou 2, o próprio arquivo de script é executável.
por jpmath 15.05.2018 / 13:24

1 resposta

0

Aparentemente, o lpoptions precisa ser executado como o usuário local. Assim, substituindo

lpoptions -d $pr

por

sudo -H -u user lpoptions -d $pr

para ambas as impressoras $pr resolve o problema.

Assumindo que user é seu nome de usuário, o script completo /etc/network/if-up.d/set-default-printer é agora:

#!/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
    
por jpmath 17.05.2018 / 10:01