web-dev-qa-db-ja.com

IPに応じてデフォルトのプリンターを設定する

セットアップ:

私は2つの場所でノートブックを使用しています。各場所で、コンピューターは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. スクリプトは_if-up_- mechanismによって実行され、ファイル/home/user/(A|B)の作成によって検証されます。
  3. 特に、1または2に続くスクリプトファイル自体は実行可能です。
1
jpmath

明らかに、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
0
jpmath