デュアルスクリーンセットアップを使用しています。 Ubuntu 14.10/Unity。各画面には独自のランチャー/ダッシュがあります。 Firefox、nautilus、ターミナル、Thunderbirdなどのデフォルトアプリケーションは、ランチャーを使用した画面に表示されます。そのため、右側の画面でFirefoxのランチャーを使用すると、右側の画面でブラウザーが開きます。あるべきです。
Google Chromeのような他のアプリケーションでその動作が欲しいです。適切な解決策が見つからないようです。
ほとんどのアプリケーションは、(Dashまたはランチャーから)開始された画面でウィンドウを開きます。ただし、一部のアプリケーションはサポートしていませんが、コマンドをリダイレクトして以下のスクリプトを介してアプリケーションを実行することにより、強制することができます。そのためには、対応する.desktop
ファイル(ランチャー)を編集する必要があります。
セットアップは少し複雑に見えますが、手順(「使用方法」)に従えば、それほど難しくないはずです。
欠点が1つあります。.desktop
ファイルのmainコマンドをこのスクリプトを呼び出すコマンドに置き換えた場合、右クリック"open with"は機能しません正しく。 Google ChromeのようなWebブラウザーの場合は、それほど大きな問題にはなりません。他のアプリケーションでは、簡単な解決策は、新しいウィンドウを開くオプションを追加することです現在の画面上ショートカットとして(以下を参照)。
スクリプトはwmctrl
とxautomation
の両方を使用します。
Sudo apt-get install xautomation
Sudo apt-get install wmctrl
ディレクトリ~/bin
がまだ存在しない場合は作成します。
スクリプトを空のファイルにコピーし、open_oncurrent
に~/bin
(拡張子なし)として保存します
対応する.desktop
ファイルを/usr/share/applications
から~/.local/share/applications
にコピーします。
cp /usr/share/applications/google-chrome.desktop ~/.local/share/applications/google-chrome.desktop
~/.local/share/applications
でローカルコピーを開きます。
gedit ~/.local/share/applications/google-chrome.desktop
ファイルを編集します(2つのオプション):
ランチャーのmainコマンドを変更するには:
行を見つけます:
Exec=/usr/bin/google-chrome-stable %U
に変更する
Exec=/bin/bash -c "open_oncurrent /usr/bin/google-chrome-stable"
オプションをショートカットとして追加するには(上の画像のように):
行を見つけます:
X-Ayatana-Desktop-Shortcuts=NewWindow;NewIncognito;
次のように置き換えます:
X-Ayatana-Desktop-Shortcuts=NewWindow;NewIncognito;New window on this screen;
次に、ファイルの最後に次のセクションを追加します。
[New window on this screen Shortcut Group]
Name=New window on this screen
Exec=/bin/bash -c "open_oncurrent /usr/bin/google-chrome-stable"
TargetEnvironment=Unity
同様に、ソリューションを他のアプリケーションに適用できます。 .desktop
ファイルで使用するコマンドの構文は、例のようなものです。
Exec=/bin/bash -c "open_oncurrent <command>"
例外を処理する方法に関する小さな追加の説明は、スクリプトにあります。
#!/usr/bin/env python3
import subprocess
import sys
import time
import getpass
t = 0; user = getpass.getuser(); application = sys.argv[1]
"""
In most cases, the command to run an application is the same as the process
name. There are however exceptions, to be listed below, if you use these appli-
cations i.c.w. this script. Just add an item to the list in the format:
["<command>", "<process_name>"],
"""
exceptions = [
["/usr/bin/google-chrome-stable", "chrome"],
]
try:
procname = [app[1] for app in exceptions if app[0] == application][0]
except IndexError:
procname = application
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
# initial position of the mouse (click position)
start_pos = int(get("xmousepos").strip().split()[0])
# x- position of right side of the screen
x_res = [int(s.split("x")[0]) for s in get("xrandr").split() if s.endswith("+0+0")][0]
# current windows
start_windows = get("wmctrl -l")
# open application
subprocess.call(["/bin/bash", "-c", application+"&"])
while t < 30:
procs = get("ps -u "+user).splitlines()
new = [w for w in get("wmctrl -lpG").splitlines() if not w.split()[0] in start_windows]
match = sum([[line for line in procs if w.split()[2] in line and procname[:15] in line] for w in new], [])
if len(match) == 1:
data = new[0].split(); curr_pos = int(data[3]); compare = (start_pos > x_res, curr_pos > x_res)
if compare[0] == compare[1]:
pass
else:
if compare[0] == True:
data[3] = str(int(data[3])+x_res)
else:
data[3] = str(int(data[3])-x_res)
cmd1 = "wmctrl -r "+data[0]+" -b remove,maximized_vert,maximized_horz"
cmd2 = "wmctrl -ir "+data[0]+" -e 0,"+(",").join(data[3:7])
for cmd in [cmd1, cmd2]:
subprocess.Popen(["/bin/bash", "-c", cmd])
break
t = t + 1
time.sleep(0.5)
UnityはCompizを作曲マネージャーとして使用し、この種のもの用のあらゆる種類のプラグインを備えています。コマンドラインをいじらずに簡単かつ長いストーリーにするために、Compiz Config Settings Managerをインストールし(Sudo apt-get install compizconfig-settings-manager
またはSoftware Center経由)、Place Windows
を探して、チェックされていることを確認します
そのプラグインの下にはMulti Output Mode
のいくつかのオプションがあります。必要なのはUse output device of focused window
です。したがって、ファイルマネージャが存在するすべての場所にファイルウィンドウを開きます