У меня есть Ubuntu 14.04 и два монитора. Когда я открываю приложения, мне нужны некоторые из них, чтобы быть на основном мониторе и других На вторичном устройстве.
В данный момент приложения всегда открываются в основном мониторе.
У меня есть значки тире только на одном, (слева) отображаются, таким образом, я не могу запустить приложения с помощью курсора или активного окна, сходящего с Compiz.
Вот идея для сценария запуска или по крайней мере сценария, который может быть обязан с ярлыком запустить окна впервые:
Шаг 1
Узнайте свою корневую ширину окна и высоту. Это может быть, покончили
xwininfo -root | awk '/Width/,/Height/ {print}'
или
xprop -root | awk '$1~/NET_DESKTOP_GEOMETRY/ {print }
Демонстрационные выводы являются ревом
$ xwininfo -root | awk '/Width/,/Height/ {print}'
Width: 1366
Height: 768
$ xprop -root | awk '$1~/NET_DESKTOP_GEOMETRY/ {print}'
_NET_DESKTOP_GEOMETRY(CARDINAL) = 1366, 768
Шаг 2
Установка wmctrl
с sudo apt-get install wmctrl
Этот инструмент допускает изменение некоторых свойств окон путем обращения к их шестнадцатеричному идентификатору или заголовку окна. Я объяснил, как это работает над другим вопросом, который я свяжу позже здесь
Шаг 3 Создайте этот сценарий в Вашем ~/bin
папка или где-нибудь который является частью Вашего пути. Можно также связать полный путь с этим сценарием к ярлыку или создать a .desktop
ярлык. Заметьте, что, так как мой экран составляет 1366 x 768, я использую 1300 в качестве своего макс. x-смещения правой стороны. Адаптируйте сценарий согласно своим спецификациям на шаге 1. Заметьте что, если у Вас есть дублирующиеся окна, это могло бы повредиться, таким образом, это хорошо главным образом для запуска двух окон программы впервые
#!/bin/sh
# Author: Serg Kolo
# Description: Send two different applications to different windows
set -x
LEFT=$(zenity --entry --text="What to put on the left?")
RIGHT=$(zenity --entry --text="What to put on the right?")
$LEFT &
$RIGHT &
sleep 1
if [ $? -eq 0 ]; then
# Get title of the left window
LEFT_TITLE="$(wmctrl -l | grep -i $LEFT | awk '{$1=$2=$3="";print}')"
# Get title of the right window
RIGHT_TITLE="$(wmctrl -l | grep -i $RIGHT | awk '{$1=$2=$3="";print }')"
printf "THIS IS A TEST %s",$LEFT_TITLE
printf "THIS IS A TEST 2 %s",$RIGHT_TITLE
wmctrl -r $LEFT_TITLE -e 0,0,0,600,600
sleep 0.5
wmctrl -r $RIGHT_TITLE -e 0,1300,0,600,600
fi
Теперь, Вы могли адаптировать этот сценарий, чтобы вести себя как средство запуска всего для одного окна и указать, хотите ли Вы, чтобы это было на правой стороне или оставлено. Я буду работать над этой идеей немного позже в тот же день, но основная идея к снова, используйте два всплывающих окна и если оператор. Другая идея, что я имею, состоит в том, чтобы использовать awk для извлечения соответствующей информации из единственного всплывающего окна. Я отредактирую свой ответ, после того как я завершаю сценарии
Править
И вот средство запуска для единственного окна; ввести programname,L
для левого размещения, и programname,R
для правильного размещения
#!/bin/sh
# set -x
PROG=$(zenity --entry --text="Program,L or R ?")
NAME=$(echo $PROG | cut -d ',' -f1)
SIDE=$(echo $PROG | cut -d ',' -f2)
$NAME &
sleep 1
if [ $? -eq 0 ]
then
TITLE=$( wmctrl -l | grep -i $NAME| awk '{$1=$2=$3=""; print}' )
sleep 0.5
if [ $SIDE = "L" ];then
wmctrl -r $TITLE -e 0,0,0,600,600
else
wmctrl -r $TITLE -e 0,1300,0,600,600
fi
fi
Решение ниже работ следующим образом:
или:
Другими словами: Вам будут нужны два сочетания клавиш, чтобы удостовериться, что новое окно приложения появляется или на первом или на втором экране.
Сценарий использует обоих xdotool
и wmctrl
:
sudo apt-get install xdotool
sudo apt-get install wmctrl
Затем:
preferred_screen
(никакое расширение) в ~/bin
. Создайте каталог при необходимости.Если Вы просто создали каталог ~bin
, выполненный в терминале:
source ~/.profile
Тестовый прогон сценарий путем выполнения в окне терминала команды:
preferred_screen 1
Теперь откройте (любое) приложение, оно должно открыться на первом экране
Повторите шаг с командой:
preferred_screen 2
теперь приложение shoulod открывается на втором экране.
Если все хорошо работает, добавьте обе команды к двум различным сочетаниям клавиш: Выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команды:
preferred_screen 1
preferred_screen 2
#!/usr/bin/env python3
import subprocess
import time
import sys
#--- enter the horizontal resolution of the left screen below
left_width = 1600
#---
target_screen = int(sys.argv[1])
get = lambda cmd: subprocess.check_output(cmd).decode("utf-8")
def new_window(left_width):
w_list1 = get(["wmctrl", "-lG"]).splitlines()
while True:
time.sleep(1)
w_list2 = get(["wmctrl", "-lG"]).splitlines()
new = [w.split() for w in w_list2 if not w in w_list1]
if len(new) != 0:
data = new[0]
pos = 1 if int(data[2]) < left_width else 2
coords = data[2:4]
w_id = data[0]
return [w_id, pos, coords]
break
subject = new_window(left_width)
if not int(subject[1]) == target_screen:
move = -left_width if target_screen == 1 else left_width - int(subject[2][0])
subprocess.Popen(["xdotool", "windowmove", subject[0], str(int(subject[2][0])+move), subject[2][1]])
Вторжение в сам процесс запуска не казалось чистыми решениями меня в этой ситуации, таким образом, решение ниже работ над "несущественной" основой (только при вызове его от сочетания клавиш).
Если сценарий называют, он ожидает в течение 15 секунд нового окна для появления и перемещает его или в право - или в оставленный экран (если это уже не находится на целенаправленном экране), и впоследствии завершается. После 15 секунд это завершается так или иначе для предотвращения выполнения бесконечно, если никакое окно не появляется.
Сценарий предполагает, что экраны являются вершиной-alligned. Если существуют значительные различия, сценарию, возможно, понадобилось бы немного тонкой настройки, чтобы препятствовать тому, чтобы окна "натолкнулись" о границу другого экрана.