Я использую настройку двойного экрана. Ubuntu 14.10 / Unity. Каждый экран имеет свой собственный лаунчер / тире. Приложения по умолчанию, такие как Firefox, Nautilus, Terminal & amp; Thunderbird появляется на экране, где я использовал лаунчер. Итак, когда я использую панель запуска Firefox на правом экране, браузер открывается на правой стороне экрана. Так, как это должно быть.
Я хотел бы, чтобы такое поведение было с другим приложением, таким как Google Chrome. Я не могу найти правильное решение.
Большинство приложений открывает свое окно на экране, они инициировались от (или от Тире или от средства запуска). Некоторые приложения однако не делают, но они могут быть вынуждены к путем перенаправления команды для запуска приложения через сценарий ниже. Чтобы сделать это, необходимо будет отредактировать соответствие .desktop
файл (средство запуска).
Установка кажется немного сложной, но если процедура выполнена ("Как использовать"), это не должно быть слишком трудно вообще.
Существует одна оборотная сторона: если Вы заменяете .desktop
основная команда файла командой для вызова этого сценария щелкнуть правой кнопкой "open with" не будет работать правильно. В случае webbrowser как Google Chrome, который не будет слишком большой проблемой. С другими приложениями простое решение состояло бы в том, чтобы добавить опцию открыть новое окно на текущем экране как ярлык (см. далее ниже).
Сценарий использует обоих 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
Отредактируйте файл (две опции):
Изменить основную команду средства запуска:
найдите строку:
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
fileis как пример:
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)
Единица использует Compiz в качестве создания менеджера, и это имеет все виды плагинов для этого вида материала. Для упрощения и длинная история, короткая, не смешивая в командной строке, установите менеджера по Настройкам Конфигурации Compiz (с sudo apt-get install compizconfig-settings-manager
или через Центр программного обеспечения), и ищите Place Windows
, удостоверьтесь, что это проверило
Под тем плагином будет несколько опций для Multi Output Mode
. То, что Вы хотите, Use output device of focused window
. Таким образом это поместит открытое окно файла везде, где Ваш файловый менеджер