设置:
我在两个地方使用笔记本电脑。在每个地方,电脑都会通过 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
不带其他参数进行检查)。
进一步诊断:
- 当我粘贴内容或从命令行调用脚本时,脚本就会起作用。
- 脚本通过-mechanism执行
if-up
,通过创建文件来验证/home/user/(A|B)
。 - 具体来说,根据 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