根据IP设置默认打印机

根据IP设置默认打印机

设置:

我在两个地方使用笔记本电脑。在每个地方,电脑都会通过 DHCP 获得一个 IP 地址。此 IP 地址取决于位置,但对于每个位置来说都是恒定的。此外,每个位置都有一台打印机。

任务:

我配置了两台打印机,并希望根据 IP 设置默认打印机。为此,我编写了一个脚本并将其放在 下/etc/network/if-up.d/set-default-printer,用于lpoptions -d实际设置默认打印机。

脚本:

#!/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

问题:

不幸的是,默认打印机没有被脚本改变(可以通过lpoptions不带其他参数进行检查)。

进一步诊断:

  1. 当我粘贴内容或从命令行调用脚本时,脚本就会起作用。
  2. 脚本通过-mechanism执行if-up,通过创建文件来验证/home/user/(A|B)
  3. 具体来说,根据 1 或 2,脚本文件本身是可执行的。

答案1

显然,lpoptions需要以本地用户身份执行。因此,替换

lpoptions -d $pr

经过

sudo -H -u user lpoptions -d $pr

对于两台打印机来说,$pr问题都解决了。

假设user是您的用户名,完整的脚本/etc/network/if-up.d/set-default-printer现在是:

#!/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

相关内容