いくつかの異なるプロファイルを実行している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#
回答が3年遅れて申し訳ありませんが、私はちょうど今このトピックに興味を持ち、この質問を見つけました。
文書化された解決策がどこにも見つからなかったので、ソースコードを確認しました。ここに、非常に関連性の高い部分があります: http://dxr.mozilla.org/mozilla-central/source/toolkit/xre/nsAppRunner .cpp#1537
ここで、行末のnullptrは、残念ながら、profile引数がSendCommandLine関数に渡されていないことを意味します。したがって、openurlメッセージを送信する正しいFirefoxウィンドウを選択することはできません。
ただし、ユーザー名が渡されており、ユーザー名がLOGNAME環境変数から初期化されていることがわかります。これに基づいて、私は次の解決策を思いつきました:
FOX_PROFILE = facebook export LOGNAME = errge。$ FOX_PROFILE /opt/firefox/firefox -profile〜/.mozilla_profiles/$ FOX_PROFILES "$ @"
初めて実行すると、新しいインスタンスが開始され、〜/ .mozilla_profiles/facebookディレクトリが存在する必要があります。
facebookプロファイルがすでに実行されている場合、2回目に実行すると、正しく接続されます。
複数の異なる実行中のプロファイルにコマンドを正しく送信できます(もちろん、異なるスクリプトの最初の行のFOX_PROFILEパラメーターを変更する必要があります)。
Linux上のFirefox26でこれをテストしましたが、動作します。
または、これが私の本格的なソリューションであり、使用したい、または使用したくない場合があります。
#!/ bin/bash set -e FOX =/opt/firefox/firefox MESSAGE = $ @ if [-z "$ FOX_PROFILE"]; then if [-z "$ {MESSAGE}"]; then FOX_PROFILE = default else FOX_PROFILE = $(kdialog --default default --menu "-$ {MESSAGE}-"デフォルトのデフォルトgooglegoogle facebook facebook errge errgeスパムスパム) fi fi export FOX_PROFILE #firefoxリモートコマンドライン送信 #のため、このハックが必要ですプロファイルパラメータを無視します。 nsAppRunner.cpp:1505を参照してください。 exportLOGNAME = errge。$ FOX_PROFILE #execの代わりにバックグラウンド実行を使用するため、動作は #一貫しています。プロファイルはすでに実行されており、 #が起動したばかりです。 $ FOX-profile〜/.mozilla_profiles/$ FOX_PROFILE "$ @" #大成功。 exit 0
パラメータを指定せずにスクリプトを実行すると、デフォルトのプロファイルが自動的に選択されますが、シェルでFOX_PROFILEを手動で設定することでスクリプトを上書きできます。コマンドラインでURLが渡されると、それを開くためのプロファイルが常に要求されます。これは、主にチャットとメールプログラムからクリックスルーするためです。その場合は、常にプロファイルを選択する必要があります(google for calendarスパム、誕生日スパムの場合はfacebookなど)。もちろん、使用スタイルに合わせてロジックを変更できます。これは単なる例であり、重要な知識はLOGNAMEのトリックです。
そしてもちろん、このラッパースクリプトがマシンでブラウザを起動する唯一の方法であることを確認する必要があります。正しいLOGNAMEを設定せずにプロファイルを開くと、そのプロファイルと通信できなくなるためです。このスクリプトを、x-www-browser、firefox、sensible-browserなどの複数のシンボリック名を介してパスの最初に配置し、BROWSER環境変数にも配置します。これを行う方法は、GNU/Linuxディストリビューションによって異なります。
デフォルトプロファイルまたはその他のプロファイルでMozillaFirefoxを既に開いている場合は、次のことを試してください。
Path-To/firefox -remote openurl("http://www.example.org")
2.xから12.xまでのMozillaFirefoxでテストし、動作しました
それは動作しません。 Mozillaアプリの2つのインスタンスを実行する唯一の方法は、2番目のインスタンスへのリモート接続を無効にすることです(通常はMOZ_NO_REMOTE = 1を使用)。つまり、他のインスタンス(新しいページを開く作成を作成するインスタンスなど)と通信する機能を無効にします。
したがって、no remote
を有効にして新しいアプリを開くか、リモートアクセスを許可するインスタンスを再利用するかを選択できます。
次のように、(ソフトウェアプロファイルが既に開いている後の)テストプロファイル呼び出しにのみ-no-remote
を追加できるはずです。
firefox -P "test" -no-remote http://www.example.org/
これにより、他のすべてのリンクを他のプロファイルでリモートで開くことができるようになります。
このソリューションが機能しない場合は、Sudo -u
を使用して、Firefoxをテスト用の個別のユーザーとしていつでも実行できます。 Firefoxは、プロファイルを使用してこれを適切に処理できるはずです。
@miemik
「しかし、インスタンスを再利用したいのですが、特定のインスタンスだけで、好きなランダムなインスタンスはありません。コマンドに「-no-remote」を追加しようとすると、「Iceweaselはすでに実行されていますが、応答していません。新しいウィンドウを開くには、最初に既存のIceweaselプロセスを閉じるか、システムを再起動する必要があります。」
プロファイルディレクトリの権限に問題があります ...権限を確認してください。他の場所(パーティション..ディスク..)からコピーまたは移動しましたか?
解決:
Rootになり、topを実行して、rootとして実行されているかどうかを確認します。次に、プロファイルdirのls -ld(これは、ホームディレクトリの下にピリオド(。)が前に付いている必要があります。これは、「ls-al」を使用して表示する必要があることを意味します。
そのディレクトリの他の権限を確認し、それに応じて変更します。
乾杯!
特定のプロファイルでFirefoxインスタンスを初めて起動するときは、次のコマンドを使用します。
_firefox -P foo -new-instance
_
上記のコマンドの最後にURLを追加して開くことができます。後でそのインスタンスでURLを開きたい場合は、次を使用できます。
_firefox -P foo -remote 'openurl(http://www.example.org)'
_
スクリプトを作成していて、そのプロファイルを実行しているインスタンスがすでに存在するかどうかを確認して、上記のコマンドのどれを呼び出す必要があるかを確認したい場合は、次を使用できます。
_firefox -P foo -remote 'ping()'
_
Linux上のFirefox34でテスト済み。
現在Firefoxにはバグがあり、メッセージでエラーが発生することに注意してください。
_Error: Failed to send command: 500 command not parseable
_
-remote openurl()
コマンドが制御ttyなしで作成された場合(たとえば、デーモンによって開始されたスクリプトから)。
KDEの.desktopファイルから(たとえば、パネルのランチャーから)スクリプトを起動するときにこのバグに遭遇したので、「ターミナルで実行」オプションにチェックマークを付ける必要がありました。これは少し面倒です。
すでにインスタンスを実行している場合、Firefoxはそれを再利用します。 firefox -no-remote
をお試しください。