特定のプロファイルでFirefoxのURLをリモートで開く方法


9

いくつかの異なるプロファイルが実行されているFirefoxのインスタンスがいくつかあります。その中には、「ソフトウェア」と「テスト」という名前のプロファイルがあります。

次のように、bashスクリプトからURLを開いてプロファイル "test"で開くようにしています。

firefox -P "test" http://www.example.org/

ただし、とにかくプロファイル「ソフトウェア」で開きます。何か案は?

Mozilla / 5.0(X11; U; Linux x86_64; en-US; rv:1.9.1.8)Gecko / 20100308 Iceweasel / 3.5.8(Firefox / 3.5.8など)

いいえ、それは権限の問題ではありません。私のすべてのプロファイルディレクトリは完全に私の権限の下にあります。

root@przehyba:~/.mozilla# ls -ld firefox/
drwx------ 13 miernik miernik 4096 Mar 11 09:15 firefox/
root@przehyba:~/.mozilla# ls -ld firefox/*
drwxr-xr-x  9 miernik miernik 4096 Mar 12 11:29 firefox/info
-rw-r--r--  1 miernik miernik  560 Mar 11 09:15 firefox/profiles.ini
drwxr-xr-x 10 miernik miernik 4096 Mar 16 11:51 firefox/software
drwxr-xr-x  9 miernik miernik 4096 Mar 11 09:14 firefox/tech
drwxr-xr-x 11 miernik miernik 4096 Mar 15 22:48 firefox/test
root@przehyba:~/.mozilla# 

回答:


7

3年遅れの回答でごめんなさい、私はたった今このトピックに興味を持ち、この質問を見つけました。

文書化された解決策がどこにも見つからなかったため、ソースコードをチェックアウトしました。ここに、非常に関連性の高い部分があります。http//dxr.mozilla.org/mozilla-central/source/toolkit/xre/nsAppRunner.cpp#1537

ここで、行末のnullptrは、残念ながらプロファイル引数がSendCommandLine関数に渡されていないことを意味しているため、openurlメッセージを送信する正しいFirefoxウィンドウを選択することはできません。

ただし、ユーザー名が渡され、ユーザー名がLOGNAME環境変数から初期化されていることがわかります。これに基づいて、私は次の解決策を思いつきました:

  • 私は、firefox.shと呼ばれるこのスクリプトでfirefoxをラップします。
FOX_PROFILE = facebook
エクスポートLOGNAME = errge。$ FOX_PROFILE
/ opt / firefox / firefox -profile〜/ .mozilla_profiles / $ FOX_PROFILES "$ @"
  • 初めて実行すると、新しいインスタンスが開始され、〜/ .mozilla_profiles / facebookディレクトリが存在している必要があります。

  • facebookプロファイルが既に実行されている場合に2回目に実行すると、正しく接続されます。

  • 複数の異なる実行中のプロファイルにコマンドを正しく送信できます(もちろん、異なるスクリプトの最初の行でFOX_PROFILEパラメータを変更する必要があります)。

私はこれをLinux上のFirefox 26でテストしましたが、動作します。

または、ここにあなたが使用したいまたは使用したくないかもしれない私の本格的なソリューションがあります:

#!/ bin / bash

セット-e

FOX = / opt / firefox / firefox

メッセージ= $ @

if [-z "$ FOX_PROFILE"]; その後
  if [-z "$ {MESSAGE}"]; その後
    FOX_PROFILE =デフォルト
  そうしないと
    FOX_PROFILE = $(kdialog --default default --menu "-$ {MESSAGE}-" default default google google facebook facebook errge errge spam spam)
  fi
fi
FOX_PROFILEをエクスポート

#このハックが必要なのは、Firefoxのリモートコマンドラインが送信されるためです。
#プロファイルパラメータを無視します。nsAppRunner.cpp:1505を参照してください。
エクスポートLOGNAME = errge。$ FOX_PROFILE

#execの代わりにバックグラウンド実行を使用するため、動作は
#プロファイルがすでに実行されているときと、それがちょうど
# 起動。
$ FOX -profile〜/ .mozilla_profiles / $ FOX_PROFILE "$ @"

#大成功。
出口0

パラメーターを指定せずにスクリプトを実行すると、デフォルトのプロファイルが自動選択されますが、シェルでFOX_PROFILEを手動で設定することで、スクリプトを上書きできます。コマンドラインでURLが渡されると、それを開くためのプロファイルを常に求められます。これは、主にチャットとメールプログラムからクリックスルーし、その場合は常にプロファイルを選択したいためです(カレンダーのGoogleスパム、誕生日スパムのFacebookなど)。もちろん、使用方法に合わせてロジックを変更できます。これは単なる例であり、重要な知識はLOGNAMEトリックです。

そしてもちろん、このラッパースクリプトがマシンでブラウザーを起動する唯一の方法であることを確認する必要があります。正しいLOGNAMEを設定せずにプロファイルを開くと、そのプロファイルと通信できなくなるためです。このスクリプトを、x-www-browser、firefox、sensible-browserなどの複数のシンボリックリンク名を介してパスの最初に配置し、BROWSER環境変数にも配置しました。これを行う方法は、GNU / Linuxディストリビューションによって異なります。


本当にありがとうございました。プロファイルを設定する必要はなく、LOGNAMEを設定するだけで正しいことができるように思えます。
dset0x 2017

0

すでにインスタンスが実行されている場合、Firefoxはそれを再利用します。お試しくださいfirefox -no-remote


しかし、インスタンスを再利用したいのですが!特定の1つだけで、好きなランダムなものはありません。コマンドに「-no-remote」を追加しようとすると、「Iceweaselはすでに実行されていますが、応答していません。新しいウィンドウを開くには、まず既存のIceweaselプロセスを閉じるか、システムを再起動する必要があります。」
miernik 2010年

ああ、それはそれをより面白くします。どうすればいいのかわかりません。IIUC、-no-remoteは、インスタンス間の「対話」を無効にします。これは目標から外れていて、やり過ぎかもしれませんが、中央ファイルまたはサーバーのURLキューをポーリングし、現在のプロファイルを対象とするときにそれを開く拡張機能を作成できます。次に、その拡張機能をすべてのインスタンスにインストールします。
janmoesen 2010年

0

@miemik

「しかし、インスタンスを再利用したいのです。好きなランダムなインスタンスではなく、特定のインスタンスのみです。コマンドに「-no-remote」を追加しようとすると、「Iceweaselはすでに実行されていますが、応答していません。新しいウィンドウを開くには、まず既存のIceweaselプロセスを閉じるか、システムを再起動する必要があります。」

あなたは持っているプロフィールのディレクトリと権限の問題を ...許可を確認してください。他の場所(partition..disk ..)からコピーまたは移動しましたか?

解決:

rootになってtopを実行し、rootとして実行されているかどうかを確認します。次に、プロファイルdirのls -ldを実行します(これは、ホームディレクトリーの下にあり、その前にピリオド(。)が必要です。.それを表示するには、「ls -al」を使用する必要があります。

そのディレクトリの他の権限を確認し、それに応じて変更します。

乾杯!


権限を確認し、編集結果を質問に貼り付けました。それはその問題ではありません。
miernik 2010年

0

動作しません。Mozillaアプリの2つのインスタンスを実行する唯一の方法は、2番目のインスタンスへのリモート接続を無効にすることです(通常はMOZ_NO_REMOTE = 1を使用)。つまり、他のインスタンスと通信する機能(新しいページを開くようなもの)を無効にします。

そのため、no remote有効にした状態で新しいアプリを開くか、リモートアクセスを許可するインスタンスを再利用するかを選択します。


これは実際に機能します。errgeの回答を参照してください。それが機能しないとはどういう意味ですか?
2014年

0

次のように、-no-remote(ソフトウェアプロファイルがすでに開いている後)テストプロファイル呼び出しのみにを追加できるはずです。

firefox -P "test" -no-remote http://www.example.org/

これにより、他のすべてのリンクを他のプロファイルでリモートで開くことができるはずです。

このソリューションが機能しない場合は、を使用して、Firefoxをテスト用の別のユーザーとしていつでも実行できますsudo -u。しかし、Firefoxはプロファイルでこれを適切に処理できるはずです。


-no-remoteフラグを使用して新しいFirefoxインスタンスが開始され、既存のFirefoxインスタンスがすでに実行されている場合は、再利用する必要があるため、この回答は適切ではありません。
2014年

0

Mozilla Firefoxをデフォルトのプロファイルまたはその他のプロファイルで既に開いている場合は、次のことを試してください。

Path-To/firefox -remote openurl("http://www.example.org")

2.xから12.xまでのMozilla Firefoxでテストおよび動作しました


コマンドラインに使用に必要なプロファイルが含まれていないため、この回答は適切ではありません。
2014年

0

特定のプロファイルでFirefoxインスタンスを初めて起動するときは、次のコマンドを使用します。

firefox -P foo -new-instance

上記のコマンドの最後にURLを追加して開くことができます。後で、そのインスタンスでURLを開きたい場合は、以下を使用できます。

firefox -P foo -remote 'openurl(http://www.example.org)'

スクリプトを作成していて、そのプロファイルを実行しているインスタンスがすでに存在するかどうかを確認して、上記のコマンドのどれを呼び出す必要があるかを確認するには、次のコマンドを使用できます。

firefox -P foo -remote 'ping()'

Linux上のFirefox 34でテスト済み。

現在Firefoxにはバグがあり、メッセージでエラーになることに注意してください

Error: Failed to send command: 500 command not parseable

-remote openurl()コマンドが制御ttyなしで行われた場合(たとえば、デーモンによって開始されたスクリプトから)。

KDEの.desktopファイルから(たとえば、パネルのランチャーから)スクリプトを起動するときにこのバグにぶつかったため、「端末で実行」オプションにチェックを付ける必要がありましたが、これは少し面倒です。


-1

記録として、1つの解決策は次のとおりです。KDEでは、次のコマンドで実行するようにデフォルトのブラウザーを設定します。

firefox -P "default"

ここで、「デフォルト」は毎回使用するプロファイルです。

次に、引数なしでFirefoxインスタンスを起動します(デフォルトのKDE Firefoxランチャー)。これでFirefoxが正常に開きます。別のプロファイルを開きたいので、KDEメニューエディターで別のランチャーを作成します。

firefox -ProfileManager -no-remote %u

これにより、プロファイルマネージャーが開きます。使用するプロファイルを選択します。

同時に実行されているいくつかのプロファイルでテストされ、任意のアプリ(チャットクライアントなど)からURLをクリックすると、選択したプロファイルで新しいタブが開きます。

誰かがこれが役に立ってくれることを願っています:)。

Gnomeではテストされていませんが、再現できることを願っています。


1
これは質問の答えにはなりません。OPは、スクリプトから異なるプロファイルでFirefoxを自動的に起動したいと考えています。
terdon 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.