web-dev-qa-db-ja.com

Firefox、2台のLinuxマシン、1台のXサーバー

Windowsからssh(PuTTY)経由で定期的にログオンしているLinuxマシンを持っています。 WindowsデスクトップでVcXsrvX-serverを実行しています。私は主にこれを使用してデバッガー(ddd)を実行し、Firefoxを使用してWebベースのコードレビューシステムにアクセスします。 LinuxのFirefoxを使用すると、スクリプトから起動できるので便利です。私は通常、新しいウィンドウを作成し続けないように、「-new-tab」を使用してこれを起動します。

今、私は新しいアップデートLinuxマシンを手に入れました。これは、当分の間、古いマシンと一緒に実行しています。私が気付いたのは、いくつかの奇妙な動作です。新しいFirefoxセッションを起動すると、いずれかのマシンで既に実行されているセッションがある場合、それが使用されます。

私ができるようにしたいのは、新しいタブとして起動することですが、同じXサーバーに表示されている別のマシンのインスタンスではなく、現在のマシンのFirefoxのインスタンスの下でのみ起動します。

-no-remote、-new-instanceなどのさまざまなフラグを試したり、特定のプロファイルを定義して使用したりしています。しかし、私は望ましい結果を得ることができませんでした。上記の動作が発生するか、「Firefoxは既に実行されていますが、応答しません。閉じてください」などのエラーが表示されます。

編集:いくつかの例を提供するためにこれを編集するように依頼されました。

OK。以下では、M_OLDとM_NEWを参照します。これらは、異なるバージョンのFirefox(1.5および19)で異なるバージョンのLinuxを実行する別々のマシンです。 PuTTYと呼ばれるsshクライアントを介してそれらに接続し、XをWindowsデスクトップ上のXサーバーに転送しています。関係するXサーバーは1つだけです。

例1:

したがって、PuTTYセッションからM_OLDまで、次のように実行します。

firefox www.google.com &

m_NEWPuTTYセッションから実行します。

firefox www.imdb.com &

次に、2つのタブを持つ1つのFirefox1.5ウィンドウを取得します。同じことを逆に行うと、同じ結果が得られますが、Firefox 19が使用されます。つまり、以下のコメントで説明されているように、最初のコマンドはFirefoxのインスタンスを起動し、2番目のコマンドは既存のインスタンスに新しいタブを開くように指示するだけです。インスタンスが別のマシン上にある場合でも、同じXサーバーである限り。

しかし、私はこれを望んでいません。マシンごとにインスタンスを分けたい。そう:

例2:

したがって、PuTTYセッションからM_OLDまで、次のように実行します。

firefox -no-remote www.google.com &

m_NEWPuTTYセッションから実行します。

firefox -no-remote www.imdb.com &

これで、Firefoxの2つの別々のインスタンスができました。ただし、M_NEWで実行すると、次のようになります。

firefox -no-remote www.google.com &

取得します

Firefox is already running, but is not responding. To open a new window, you must first close the existing Firefox process, or restart your system.

やってみても

firefox -no-remote -new-instance www.google.com &

あるいは単に

firefox -new-instance www.google.com &

それでもエラーが発生します。

私が本当に望んでいるのは(そしてそれは不可能かもしれませんが)マシンごとに別々のインスタンスを持つことですが、そのマシンから新しいURLが起動されると、新しいタブが開きます。 URLごとに新しいタブを持つインスタンスを1つだけ持つか、マシンごとに1つのインスタンスしか持てないようですが、一度に1つしか持てません。

うまくいけば、それはより明確です。

10
PaulM

個別のFirefoxインスタンス(たとえば、--no-remoteで作成されたもの)には、個別のプロファイルが必要です。

オプション1:Firefoxを実行しているシステムごとに1つずつ、2つ(またはそれ以上)のプロファイルを作成します。例

firefox --no-remote -CreateProfile localuser
firefox --no-remote -CreateProfile Host2

次に、Firefoxを起動し、起動時にプロファイルを選択します

firefox --no-remote -P localuser

または

firefox --no-remote -P Host1

オプション2:動的ソリューションを設定して、起動時に「使い捨て」プロファイルを作成します。

TEMPPROFILE=$(date +%Y%m%d%H%M%S)
firefox --no-remote -CreateProfile $TEMPPROFILE 2>/tmp/.mozprofile.$TEMPPROFILE
firefox --no-remote -P $TEMPPROFILE

後で一時プロファイルを削除する手順を追加することもできます(削除するディレクトリは、上記のコマンドを介して/tmp/.mozprofile.$TEMPPROFILEに保存されているCreateProfileコマンドからの出力を解析することで見つけることができます。

1
Johan

XRemoteClient.cpp を見ると、次のことを行う必要があると思います。

user@Host1$ firefox -CreateProfile profile1

そして:

user@Host2$ firefox -CreateProfile profile2

次に、どこかに行きたいときは、次のようなことをします

user@Host1$ firefox -P profile1 -new-tab http://example.com

または、まあ、Host2で何をすべきか推測できると思います。

明らかに、あなたはより良い名前を選ぶことができます。また、プロファイルをどのように作成するかはそれほど重要ではありません。重要なことはコマンドラインでプロファイル名を指定する呼び出すたびに、各インスタンスには独自のプロファイル名があります。

このかもしれない偶数作業

0
SamB

私は非常にエレガントな解決策を持っています ここ それでも必要な場合。今のところ、Firefoxの5つの独立したインスタンスが実行されており、必要なだけ実行されています。

0
tmh1999

わかりました...これが機能するかどうかはわかりませんが、私が最初に試すのは次のとおりです。

新しいタブを作成しようとせず、新しいインスタンスだけを作成する2番目のスクリプトを各マシンで作成する場合はどうでしょうか。そのマシンで現在FFを実行していない場合は、この新しいスクリプトを使用しますが、すでに実行している場合は、新しいタブを作成する古いスクリプトを使用します。

これが機能する場合は、単一のスクリプトでps出力の正規表現解析を実行して、FFがマシンですでに実行されているかどうかを確認し、内容に応じて-new-tabスイッチまたは-no-remoteを使用できる可能性があります。見つける;しかし、このメソッドがテストされるまで待つことをお勧めします。これは、機能しない可能性のあるもののコーディングがかなり多いためです。

0
CB Services