请问是否可以根据电脑所连接的wifi网络自动切换默认打印机。
显然,windows有这个功能
答案1
此答案不需要sudo
特权
我假设您有两个地方有 WiFi 连接和两台不同的网络打印机。您的笔记本电脑设置为连接到这两个 WiFi 连接。您还将笔记本电脑的打印机设置为这两台打印机,当连接到相应的 WiFi 网络时,您可以打印到这两台打印机。
为了简单起见,我将其称为:
- 第一个 WiFi 网络为“HomeWiFi” 以及关联的打印机为“HomePrinter”。
- 第二个 WiFi 网络为“OfficeWiFi”,相关打印机为“OfficePrinter”。
我编写了一个 bash 脚本,我称之为changedefaultprinter.sh
您可以随意命名文件并根据需要进行编辑。您需要在脚本中输入 WiFi 和打印机的名称才能使其正常工作。
剧本
#!/bin/bash
# File name: changedefaultprinter.sh
# Purpose: Change the default printer to home or office based on WiFi
############################
# User modification section
# Add WiFi and Printer pairs below:
WIFI1="HomeWiFi"
PRINTER1="HomePrinter"
WIFI2="OfficeWiFi"
PRINTER2="OfficePrinter"
# End of user modification section
############################
CURRENTWIFI=$(iwgetid -r) # Get the name of the current WiFi
if [[ ! $CURRENTWIFI ]]; then # Not on WiFi
echo "Could not find any WiFi, exiting..."
exit 0
elif [[ $CURRENTWIFI == $WIFI1 ]]; then
echo "Found $WIFI1, Setting $PRINTER1 as the default..."
lpoptions -d $PRINTER1
elif [[ $CURRENTWIFI == $WIFI2 ]]; then
echo "Found $WIFI2, Setting $PRINTER2 as the default..."
lpoptions -d $PRINTER2
else
echo "On unknown WiFi, exiting..."
exit 0
fi
如何使用:
将脚本复制到文件中
changedefaultprinter.sh
并将其保存在位置/home/$USER/bin
。如果您没有文件夹,bin
请先创建它。使文件“可执行”。请参阅如何使文件可执行?找出您已设置的 WiFi 和默认打印机的名称。您可以通过多种方式执行此操作。我使用终端和以下命令:
确保您已连接到家庭 WiFi,并且家庭打印机已设置为默认打印机。按Ctrl+ Alt+打开终端T并输入命令:
iwgetid -r
这应该会显示您的 WiFi 名称。从终端复制此名称并将其粘贴到上面显示的文件中HomeWiFi
。
现在要复制家庭打印机的名称,请使用以下命令:
lpstat -t
你会看到类似这样的内容:
scheduler is running
system default destination: HomePrinter
从终端复制打印机的名称并将其粘贴到上面的文件中HomePrinter
。
- 现在将笔记本电脑带到办公室并重复相同的过程,将办公室 WiFi 和办公室默认打印机的名称放入脚本中。替换脚本中的
OfficeWiFi
和。OfficePrinter
试试看:
在终端中连接家里的 WiFi 输入命令:
changedefaultprinter.sh
如果一切顺利,您将看到一些文本,告诉您您的默认打印机现在已设置为您的家用打印机。在办公室中执行相同的操作,以确保它也在那里正常工作。
当你登录笔记本电脑时运行脚本
打开应用程序“启动应用程序偏好设置”,然后单击按钮Add
添加一个合理的脚本名称,以便您知道它的作用,以及脚本的位置:
/home/$USER/bin/changedefaultprinter.sh
其中 $USER 是您的用户名。
单击Add保存更改并关闭“启动应用程序首选项”窗口。从现在起,每次您登录笔记本电脑时,此脚本都会运行。它将确定您使用的 WiFi 并更改默认打印机。
答案2
此答案需要sudo
权限
我假设您有两个地方有 WiFi 连接和两台不同的网络打印机。您的笔记本电脑设置为连接到这两个 WiFi 连接。您还将笔记本电脑的打印机设置为这两台打印机,当连接到相应的 WiFi 网络时,您可以打印到这两台打印机。
为了简单起见,我将其称为:
- 第一个 WiFi 网络为“HomeWiFi” 以及关联的打印机为“HomePrinter”。
- 第二个 WiFi 网络为“OfficeWiFi”,相关打印机为“OfficePrinter”。
我编写了一个 bash 脚本,我称之为10-changedefaultprinter
。您需要在脚本中添加您的用户名以及 WiFi 和打印机的名称才能使其正常工作。
剧本
#!/bin/bash
# File name: 10-changedefaultprinter
# Purpose: Change the default printer to home or office based on WiFi
# Instructions:
# 1. sudo chown root:root 10-changedefaultprinter
# 2. sudo chmod 744 10-changedefaultprinter
# 3. sudo ln -s 10-changedefaultprinter' /etc/NetworkManager/dispatcher.d
#
############################
# User personalization section
USERNAME="your_username_goes_here"
# Add WiFi and Printer pairs below:
WIFI1="HomeWiFi"
PRINTER1="HomePrinter"
WIFI2="OfficeWiFi"
PRINTER2="OfficePrinter"
# End of Personalization
############################
# Network Manager sets this value
ACTION=$2
CURRENTWIFI=$(iwgetid -r) # Get the name of the currrent WiFi
if [[ ! $CURRENTWIFI ]]; then # Not on WiFi
echo "Could not find any WiFi, exiting..."
exit 0
elif [ $CURRENTWIFI == $WIFI1 ] && [ "$ACTION" == "up" ]; then
echo "Found $WIFI1, Setting $PRINTER1 as the default..."
sudo -u $USERNAME lpoptions -d $PRINTER1
elif [ $CURRENTWIFI == $WIFI2 ] && [ "$ACTION" == "up" ]; then
echo "Found $WIFI2, Setting $PRINTER2 as the default..."
sudo -u $USERNAME lpoptions -d $PRINTER2
fi
如何使用:
- 将脚本复制到文件中
10-changedefaultprinter
,并将其保存在位置/home/$USER/
。如果您将其保存在其他位置,例如,则在使用下面以以下命令为前缀的命令之前,/home/$USER/bin
请使用命令更改终端中的当前目录。cd /home/$USER/bin
sudo
- 编辑文件并添加您的个人信息。替换为您的用户名。您可以在终端中
your_username_goes_here
输入用户名来找到用户。echo $USER
- 找出您已设置的 WiFi 和默认打印机的名称。您可以通过多种方式执行此操作。我使用终端和以下命令:
确保您已连接到家庭 WiFi,并且家庭打印机已设置为默认打印机。按Ctrl+ Alt+打开终端T并输入命令:
iwgetid -r
这应该会显示您的 WiFi 名称。从终端复制此名称并将其粘贴到上面显示的文件中HomeWiFi
。
现在要复制家庭打印机的名称,请使用以下命令:
lpstat -t
你会看到类似这样的内容:
scheduler is running
system default destination: HomePrinter
从终端复制打印机的名称并将其粘贴到上面的文件中HomePrinter
。
- 现在将笔记本电脑带到办公室并重复相同的过程,将办公室 WiFi 和办公室默认打印机的名称放入脚本中。替换脚本中的
OfficeWiFi
和。OfficePrinter
- 更改所有权、权限并创建指向其目标位置的符号链接。
使用终端和以下命令:
sudo chown root:root 10-changedefaultprinter
sudo chmod 744 10-changedefaultprinter
sudo ln -s 10-changedefaultprinter /etc/NetworkManager/dispatcher.d
您可以使用cp
命令复制或使用mv
命令移动,而不是使用上面的命令创建符号链接ln -s
。
试试看:
在家里或办公室尝试一下:
- 暂时将默认打印机更改为“错误”的打印机。
- 断开 WiFi 连接并重新连接
如果一切顺利,您的默认打印机将根据您连接的 WiFi 而改变。从现在开始,您的默认打印机将根据您使用的 WiFi 而改变。
如果不起作用,请检查系统日志并查找包含nm-dispatcher
错误的行。
希望这可以帮助
答案3
亚历山德罗,我为自己长期以来忍受同样的烦恼而感到惭愧,直到我才明白这其实是多么简单……!
我做了一个小项目,我想你可能想尝试一下。无论如何,请告诉我。
要安装它,请打开一个终端并输入以下内容(您不需要输入“#”和其后的数字):
sudo apt install autorandr #1
mkdir -p ~/.config/autorandr && cd ~/.config/autorandr #2
git clone https://github.com/Noughtnaut/noughty-autorandr.git #3
autorandr -s some_name_here #4
一切就绪。以下是你刚刚执行的操作:
- 安装该
autorandr
软件包,当您插入或拔下显示器时,该软件包会自动运行。如果您愿意,也可以通过图形软件管理器执行此操作。 - 为程序的本地配置创建一个文件夹,并导航到该文件夹。
- 下载我的管理打印机默认值的插件。务必在
~/.config/autorandr
文件夹内完成此操作。 - 存储当前设置 - 包括默认打印机的设置。然后,当您到达办公室或任何具有特定显示器设置的地方时,您可以再次运行相同的命令,每个配置文件使用不同的名称。
从此以后,您的笔记本电脑将自动为您更改默认打印机。