実行時に他のプロセスを使用するためにいくつかの実行可能ファイルのコピーの名前を変更したいと思います。
システム:Lubuntu 18.04デスクトップ64ビット。
たとえば、
$ sudo cp -a /usr/bin/mate-terminal /usr/bin/mate-terminal-left
$ sudo cp -a /usr/bin/mate-terminal /usr/bin/mate-terminal-right
ランチャーで実行すると、mate-terminal-left
画面の左側にターミナルウィンドウが開きます(OpenBoxウィンドウマネージャの構成設定のため)。
ちなみに、その端末で次のコマンドを実行します。
$ ps -eo pid,command | grep -i 'terminal' | grep -ve 'grep'
19294 /usr/bin/mate-terminal-left
これで、左側の端末が開いている状態で別のランチャーで実行すると、mate-terminal-right
画面の右半分に端末ウィンドウが開きます。ただし、mate-terminal-right
新しいプロセスは作成されず、すでにアクティブなmate-terminal-left
プロセスを使用しているため、左側にも開きます。
$ ps -eo pid,command | grep -i 'terminal' | grep -ve 'grep'
19294 /usr/bin/mate-terminal-left
初めて開くとmate-terminal-right
右側が開き、mate-terminal-left
右側でも終了します。
mate-terminal
一部の実行可能ファイル(Geanyなど)は左右の名前を変更する方法に適していますが、他の実行可能ファイル(および)は、異なる名前pcmanfm
で始まってもすべてのインスタンスに対して同じプロセスを使用することがわかりました。
私の質問は:それぞれを別々のプロセスとして有効にしてmate-terminal-left
開く方法は何ですか?mate-terminal-right
左右の端末を作成する方法を提案する下記のコメントにご提案いただきありがとうございます。しかし、それは私の質問ではありません。私は誰かが同じプロセスの複数のインスタンスを実行するのではなく、複数のプロセスで同じ実行ファイルを実行したい理由を具体的に説明するためにこの例を使用しています。私はmate-terminal
これを例として使用しているので、他の端末を探していません。
この質問のタイトルは、私が尋ねるものとまったく同じです。 「実行ファイルのコピーを別のプロセスとして開くにはどうすればよいですか?」
答え1
ここで見ているものは非常に具体的ですが、mate-terminal
他のアプリケーションでも見つけることができるいくつかの共有GNOME / GTK +インフラストラクチャを使用する方が一般的です(これpcmanfm
も言及しました)。
新しいコピーを開始するとmate-terminal
(おそらく別のバイナリから)するこれに対して新しいプロセスを作成します。しかし、mate-terminal
D-Busに接続して「工場」を見つけようとプログラムされています。この場合、ターミナルで起動されたもののパラメータを渡し、「工場」にそれを管理させ、新しいプロセスを終了します。 (工場がないと工場に登録されるため、最初に開始されたプロセスがすべての端末を管理することになります。)
「工場」はD-Bus経路を通して発見されます/org/mate/Terminal/Factory
。ハードコーディングバイナリファイルを入力してください。 (したがって、バイナリの他のコピーにコピーされます。)
場合によっては、コマンドライン引数をmate-terminal
渡してこの動作を無効にできます。--disable-factory
(望むよりマニュアルページ詳細については。 )
これはmate-terminal
動作方法が非常にユニークです。特にpcmanfm
実際には同じようには行われません。pcmanfm
別のプロセスを開始する方法がサポートされているのか、それともD-Busを介して既存のインスタンスと通信することが機能する唯一の方法なのかはわかりません。 (pcmanfm
このような場合があるかどうか調べてください。)
答え2
回避策:別々のプロセスを作成するツールを使用してください。
私のメインコンピュータのデスクトップに3つのターミナルウィンドウを生成するシェルスクリプトがあります。私のスクリプトのいくつかのアイデアに基づいて、あなたに役立つことができる(または必要なものを作成するのに役立ちます)、次のことを試しました。
#!/bin/bash
vdockw=0 #68
hdockw=60
resol=$(xrandr|grep current|cut -d, -f2)
resol=$(<<< "$resol" sed 's/.*current //')
echo $resol
xres=${resol%% *}
yres=${resol##* }
echo $xres $yres
xmid=$(( (xres-vdockw)/2 ))
ymid=$((yres-hdockw))
echo $xmid $ymid
#xterm -title "term v" & pid=$!
sakura --title="term v" & pid=$!
sleep 0.5
wid=$(wmctrl -lp | grep "$pid" | cut "-d " -f1)
sleep 1
echo $pid $wid
wmctrl -i -r $wid -e 1,0,0,$xmid,$ymid
#xterm -title "term h" & pid=$!
sakura --title="term h" & pid=$!
sleep 0.5
wid=$(wmctrl -lp | grep "$pid" | cut "-d " -f1)
sleep 1
echo $pid $wid
wmctrl -i -r $wid -e 1,$((xmid+vdockw)),0,$xmid,$ymid
vdockw=68
インストールされた2つの18.04 LTSシステム、Lubuntu(現状のまま)と標準のUbuntu()で動作するかどうかをテストしました。
shellscriptはリポジトリで利用可能で、次のようにインストールできるパッケージsakura wmctrl
とMaybeを使用します。xterm
universe
sudo apt update
sudo apt install sakura wmctrl xterm