web-dev-qa-db-ja.com

コマンドラインから再起動せずにUbuntuシステムプロキシ設定を設定する

Ubuntu 14.04を使用しています。コマンドラインからhttp proxy設定を変更したい。これは、GUI([すべての設定]-> [ネットワーク]-> [ネットワークプロキシ])で変更してボタンApply System Wideをクリックするのと同じです。スクリプト(bash)から動的に設定を変更する予定なので、システムを再起動/ログアウトしたくありません。

14
ma08

私が理解していることから、そのGUIを介してシステム全体にプロキシを設定すると、次の3つのことが行われます。

  1. Dconfデータベースに対応する値を設定します。
  2. /etc/environmentに値を設定します。
  3. /etc/apt/apt.confに値を設定します。

1と3はすぐに有効になります。 /etc/environmentはログイン時に解析されるため、それを有効にするには、ログアウトしてログインする必要があります。 (これはログインシェルを実行するだけではなく、ログインに適切であることに注意してください。)次のスクリプトは同等である必要があります(http/httpsプロキシを想定)。

#! /bin/bash
HTTP_PROXY_Host=proxy.example.com
HTTP_PROXY_PORT=3128
HTTPS_PROXY_Host=proxy.example.com
HTTPS_PROXY_PORT=3128

gsettings set org.gnome.system.proxy mode manual
gsettings set org.gnome.system.proxy.http Host "$HTTP_PROXY_Host"
gsettings set org.gnome.system.proxy.http port "$HTTP_PROXY_PORT"
gsettings set org.gnome.system.proxy.https Host "$HTTPS_PROXY_Host"
gsettings set org.gnome.system.proxy.https port "$HTTPS_PROXY_PORT"

Sudo sed -i.bak '/http[s]::proxy/Id' /etc/apt/apt.conf
Sudo tee -a /etc/apt/apt.conf <<EOF
Acquire::http::proxy "http://$HTTP_PROXY_Host:$HTTP_PROXY_PORT/";
Acquire::https::proxy "http://$HTTPS_PROXY_Host:$HTTPS_PROXY_PORT/";
EOF

Sudo sed -i.bak '/http[s]_proxy/Id' /etc/environment
Sudo tee -a /etc/environment <<EOF
http_proxy="http://$HTTP_PROXY_Host:$HTTP_PROXY_PORT/"
https_proxy="http://$HTTPS_PROXY_Host:$HTTPS_PROXY_PORT/"
EOF

PAMが/etc/environmentをすべての場所に適用するには再ログインが必要ですが、現在のシェルでは、そのファイルの値を抽出できます。

export http_proxy=$(pam_getenv http_proxy)
15
muru

タスク全体を簡略化するために、ProxyManというツールを作成しました。 このリンク からダウンロードできます。

また、バックエンドの機能を知りたい場合は、コードを確認することもできます。 Zipファイルをダウンロードし、それらを抽出し、ターミナルで抽出されたファイルの場所に移動します。次のコマンドが役立ちます。

  • bash main.sh:プロキシを設定および設定解除します
  • bash proxy_check.sh:現在のプロキシ設定を確認します。
3