此答案不需要sudo特权

此答案不需要sudo特权

请问是否可以根据电脑所连接的wifi网络自动切换默认打印机。

显然,windows有这个功能

答案1

此答案不需要sudo特权

我假设您有两个地方有 WiFi 连接和两台不同的网络打印机。您的笔记本电脑设置为连接到这两个 WiFi 连接。您还将笔记本电脑的打印机设置为这两台打印机,当连接到相应的 WiFi 网络时,您可以打印到这两台打印机。

为了简单起见,我将其称为:

  1. 第一个 WiFi 网络为“HomeWiFi” 以及关联的打印机为“HomePrinter”。
  2. 第二个 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

如何使用:

  1. 将脚本复制到文件中changedefaultprinter.sh并将其保存在位置/home/$USER/bin。如果您没有文件夹,bin请先创建它。使文件“可执行”。请参阅如何使文件可执行?

  2. 找出您已设置的 WiFi 和默认打印机的名称。您可以通过多种方式执行此操作。我使用终端和以下命令:

确保您已连接到家庭 WiFi,并且家庭打印机已设置为默认打印机。按Ctrl+ Alt+打开终端T并输入命令:

iwgetid -r

这应该会显示您的 WiFi 名称。从终端复制此名称并将其粘贴到上面显示的文件中HomeWiFi

现在要复制家庭打印机的名称,请使用以下命令:

lpstat -t

你会看到类似这样的内容:

scheduler is running
system default destination: HomePrinter 

从终端复制打印机的名称并将其粘贴到上面的文件中HomePrinter

  1. 现在将笔记本电脑带到办公室并重复相同的过程,将办公室 WiFi 和办公室默认打印机的名称放入脚本中。替换脚本中的OfficeWiFi和。OfficePrinter

试试看:

在终端中连接家里的 WiFi 输入命令:

changedefaultprinter.sh

如果一切顺利,您将看到一些文本,告诉您您的默认打印机现在已设置为您的家用打印机。在办公室中执行相同的操作,以确保它也在那里正常工作。

当你登录笔记本电脑时运行脚本

打开应用程序“启动应用程序偏好设置”,然后单击按钮Add

在此处输入图片描述

添加一个合理的脚本名称,以便您知道它的作用,以及脚本的位置:

/home/$USER/bin/changedefaultprinter.sh

其中 $USER 是您的用户名。

单击Add保存更改并关闭“启动应用程序首选项”窗口。从现在起,每次您登录笔记本电脑时,此脚本都会运行。它将确定您使用的 WiFi 并更改默认打印机。

答案2

此答案需要sudo权限

我假设您有两个地方有 WiFi 连接和两台不同的网络打印机。您的笔记本电脑设置为连接到这两个 WiFi 连接。您还将笔记本电脑的打印机设置为这两台打印机,当连接到相应的 WiFi 网络时,您可以打印到这两台打印机。

为了简单起见,我将其称为:

  1. 第一个 WiFi 网络为“HomeWiFi” 以及关联的打印机为“HomePrinter”。
  2. 第二个 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

如何使用:

  1. 将脚本复制到文件中10-changedefaultprinter,并将其保存在位置/home/$USER/。如果您将其保存在其他位置,例如,则在使用下面以以下命令为前缀的命令之前,/home/$USER/bin请使用命令更改终端中的当前目录。cd /home/$USER/binsudo
  2. 编辑文件并添加您的个人信息。替换为您的用户名。您可以在终端中your_username_goes_here输入用户名来找到用户。echo $USER
  3. 找出您已设置的 WiFi 和默认打印机的名称。您可以通过多种方式执行此操作。我使用终端和以下命令:

确保您已连接到家庭 WiFi,并且家庭打印机已设置为默认打印机。按Ctrl+ Alt+打开终端T并输入命令:

iwgetid -r

这应该会显示您的 WiFi 名称。从终端复制此名称并将其粘贴到上面显示的文件中HomeWiFi

现在要复制家庭打印机的名称,请使用以下命令:

lpstat -t

你会看到类似这样的内容:

scheduler is running
system default destination: HomePrinter 

从终端复制打印机的名称并将其粘贴到上面的文件中HomePrinter

  1. 现在将笔记本电脑带到办公室并重复相同的过程,将办公室 WiFi 和办公室默认打印机的名称放入脚本中。替换脚本中的OfficeWiFi和。OfficePrinter
  2. 更改所有权、权限并创建指向其目标位置的符号链接。

使用终端和以下命令:

sudo chown root:root 10-changedefaultprinter
sudo chmod 744 10-changedefaultprinter
sudo ln -s 10-changedefaultprinter /etc/NetworkManager/dispatcher.d

您可以使用cp命令复制或使用mv命令移动,而不是使用上面的命令创建符号链接ln -s

试试看:

在家里或办公室尝试一下:

  1. 暂时将默认打印机更改为“错误”的打印机。
  2. 断开 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

一切就绪。以下是你刚刚执行的操作:

  1. 安装该autorandr软件包,当您插入或拔下显示器时,该软件包会自动运行。如果您愿意,也可以通过图形软件管理器执行此操作。
  2. 为程序的本地配置创建一个文件夹,并导航到该文件夹​​。
  3. 下载我的管理打印机默认值的插件。务必在~/.config/autorandr文件夹内完成此操作。
  4. 存储当前设置 - 包括默认打印机的设置。然后,当您到达办公室或任何具有特定显示器设置的地方时,您可以再次运行相同的命令,每个配置文件使用不同的名称。

从此以后,您的笔记本电脑将自动为您更改默认打印机。

相关内容