Как я могу открыть окно на другом мониторе?

Это прибывает от суперпользователя:

menuentry "Other Disk" {
    insmod part_msdos
    set root='(hd1)'
    drivemap -s hd0 hd1
    chainloader (hd1)+1
}

Этот конкретный пример для slingshotting к другому диску для начальной загрузки MBR, который содержит GRUB1. Таким образом, требуется немного перезаписи для Вашего конкретного примера. Но бросок GRUB2 для начальной загрузки другого диска, кажется, способ пойти. Ваш set root=(hd1,1) надежды найти загрузчик в первом разделе второго диска.

9
22.12.2017, 03:05
5 ответов

Нет, Вы не можете сделать этого непосредственно. В X архитектуре два физических монитора, которые Вы видите, не являются заметными приложениями. Можно только проложить себе путь вокруг этой абстракции путем определения, которому соответствуют области видимой рабочей области, какой монитор и затем помещают окна при корректном смещении.

Разумные инструментарии поддерживают a -geometry опция, которая позволяет Вашему приложению запрашивать быть помещенным в определенное положение. Если Вы не имеете эту опцию в наличии, можно использовать wmctrl если у Вас есть совместимый менеджер по X Window EWMH/NetWM, чтобы переместить и уже изменить размер существующих окон (см. wmctrl (1), Вам нужны опции -r и -e). Я использую devilspie для принуждения размещения некоторых окон и конечно предпочтительный менеджер окон может иметь свое собственное средство для принуждения размещения окна.

devilspie позволяет применять определенные действия на X-окна и может использовать свойства X-окна для различения различных окон и приложений. Ключевое правило для Вас было бы geometry "<width>x<height>+<xoffset>+<yoffset>".

Все же всегда необходимо делать вычисления того, когда и где другой физический монитор начинает себя. Но это не слишком твердо и xrandr действительно говорит Вам, как и где это использует мониторы в форме "<width>x<height>+<xoffset>+<yoffset> на каждой строке, смотрящей с выходным именем.

Нет foolproof-it-will-just-work пути, потому что реализации могут (и делать!) варьируются. wmctrl обычно работы над заголовком окна для идентификации цели. devilspie может также относиться к его классу, все же, я не знаю ни о каком инструментарии, который позволяет Вам указать класс X-окон, но не его геометрию.

Конечно, Вы могли всегда запускать два xephyr экземпляры и делают одну заливку Вашим левым экраном и другим Вашим правильным экраном и затем обращаются к экранам через DISPLAY переменная среды, но это решение имеет другие оборотные стороны.

В теории полномочия для управления размещением окна являются менеджером окон. Следовательно, если Вы хотите материал, Ваш менеджер окон не может к, это будет hacky, и это - также причина, почему нет никакого универсального способа выполнить это.

Все же, если Ваш конкретный вариант использования является Вашим эмулятором андроида..., который очень отличается от просьбы об опции указать SCREEN=n fooapp на оболочке, затем devilspie может быть тем, что Вы ищете. Подсказка: Я нашел, лучше определять приложения их классом окна.

5
27.01.2020, 20:06
  • 1
    Спасибо за объяснение, почему это не легкая функция. KWin также имеет правила окна, что размещение силы на другом экране (который является тем, что я использую теперь). В то время как нет никакой функции по умолчанию для SCREEN=x app, действительно ли возможно добавить свойство окна таким образом так, чтобы это могло быть фильтровано KWin? –  Lekensteyn 20.01.2014, 13:32
  • 2
    В теории да, но я не знаю ни о каком существующем решении для этого. Я думаю, что Вы не можете добавить свойства, но можно изменить существующие свойства, таким образом, Вы просто могли добавить некоторую строку к классу окна, который мог обнаружить kwin. –  Bananguin 20.01.2014, 17:33
  • 3
    , который я присудил щедростью Вам, потому что SE иначе предоставит его проголосовавшему вершине ответу, в то время как Ваш ответ лучше описывает проблемы. Текущие ответы все еще не являются удовлетворительными все же. большой –  Lekensteyn 24.01.2014, 00:36

Это зависит от того, как Ваши парные мониторы являются установкой.

Если бы Вы используете XINERAMA, чтобы заставить оба дисплея быть похожими на тот к X, то Вы использовали бы -geometry опция попросить, чтобы приложения появились в определенном местоположении. Если у Вас будет установка дисплеев как различные экраны затем, то Вы будете использовать DISPLAY достигнуть этого.

Дайте им попытку:

$ DISPLAY=0.0 xterm &
$ DISPLAY=0.1 xterm &

Если Ваши мониторы являются экраном 0 и 1, это должно породить xterm на каждом мониторе.

3
27.01.2020, 20:06
  • 1
    я уже попробовал это, но эта конфигурация не относится ко мне, один экран, расположен оставленный от другого. Я обновлю свой вопрос. –  Lekensteyn 27.12.2013, 22:42
  • 2
    Вы попытались использовать опцию геометрии для приложений, которые поддерживают ее? При предоставлении координаты x> 1600 должен расположить приложение во второе пространство мониторов. Вы могли бы также попробовать это за пределами kwin (только, чтобы видеть, работает ли он), как, по моему опыту, kwin и -geometry не всегда работает правильно. Кейси –  casey 27.12.2013, 22:49
  • 3
    , приложение, которое я пытаюсь расположить, не поддерживает такую опцию (андроид emulator, на основе QEMU). Программа открывается, где мой курсор мыши расположен. –  Lekensteyn 27.12.2013, 22:59

Это - менеджер окон определенное решение. Это - то, как сделать это с kwin, который является менеджером окон KDE по умолчанию.

Если Вы щелкаете правой кнопкой по Панели заголовка приложения и выбираете больше настроек-> специальные параметры настройки приложения.

Перейдите к вкладке соответствия Окна. Нажмите на Detect Window Properties button. Затем с мышью курсор нажимают на главное окно приложения. Это выберет класс окна и т.д. и также получит информацию о расположении окна и т.д.

Затем нажмите на вкладку Size и Position. Нажмите Box Position и поле Size и выпадающее поле направо от обоих и установите для запоминания.

Затем нажмите ОК.

В следующий раз, когда Вы запускаете приложение, это должен быть тот же размер и на том же мониторе.

Я использую это в KDE для открытия моего uRxvt терминала на моем левом мониторе на установке с 3 мониторами, и это работает каждый раз.

Удачи.

4
27.01.2020, 20:06
  • 1
    Это - то, как я делаю это прямо сейчас, я надеялся, что существует более простой способ использовать envvars. –  Lekensteyn 22.01.2014, 11:42

Я действительно сталкивался с этим методом, который использует xdotool, xprop, & wmctrl.

Вот то, что ниже сценария сделает:

  1. Найдите активное окно
  2. Получите его максимизируемое состояние и помните это
  3. Удалите максимизацию
  4. Получите его геометрию
  5. Вычислите новое положение
  6. Переместите его
  7. Максимизируйте на основе предыдущего состояния
  8. Повысьте его
  9. Вот сценарий, который делает это:

сценарий

Это переместит активное окно в другой монитор. Это может только обработать рядом, иначе. горизонтальный, конфигурация мониторов.

wid=`xdotool getactivewindow`
max_state=`xprop -id $wid _NET_WM_STATE`

wmctrl -ir $wid -b remove,maximized_vert,maximized_horz
eval `xdotool getwindowgeometry --shell $wid`

new_x=1600
if [[ "$X" -ge "$new_x" ]]; then
  new_x=0
fi

xdotool windowmove $wid $new_x $Y
if [ -z "${max_state/*_NET_WM_STATE_MAXIMIZED_*/}" ]; then
  wmctrl -ir $wid -b add,maximized_vert,maximized_horz
fi

xdotool windowraise $wid

Источник: Xubuntu – движущиеся окна между мониторами

2
27.01.2020, 20:06
  • 1
    Это только работает после того, как приложение было открыто, не действительно, что я ищу (привязка клавиш могла, вероятно, быть добавлена для этого хотя). Если я не ошибаюсь, это всегда располагает окно в левую сторону монитора? –  Lekensteyn 22.01.2014, 11:46
  • 2
    @Lekensteyn - Да намерение этого решения - Вы, запускают appX и затем выполняют этот cmd для перемещения его. У меня нет парных мониторов 8-(таким образом, у меня нет способа протестировать это, я просто нашел его и предоставил подробную информацию здесь, чтобы Вы оценили. Это - опция и могло, вероятно, быть адаптировано, но это - "необработанное" решение в своей текущей форме. –  slm♦ 22.01.2014, 15:08
  • 3
    @Lekensteyn - это решение так очень не отличается, чем Ваш SCREEN=2 appX понятие, кроме он appX; sleep 1; moveWindow.sh. –  slm♦ 22.01.2014, 15:12
  • 4
    @Lekensteyn - также я использовал devilspie, xdotool, и т.д. чтобы сделать точно то же самое (в единственном окне), это поздравление другое, в котором он показывает специфические особенности, где другое единственное объясняет возможные подходы, но не показывает детали фактической реализации. –  slm♦ 22.01.2014, 15:20
  • 5
    Это будет больше похоже app & sleep 1; moveWindow.sh поскольку программы не отсоединяются. Я не считаю это улучшением по сравнению с использованием правил окна KWin все же. +1 для Ваших усилий. –  Lekensteyn 22.01.2014, 16:14
[113082] Имела похожую проблему. Найдено следующее:[12191]Щелкните правой кнопкой мыши по заголовку окна и выберите "Другие действия" -> "Настройки оконного менеджера".[12192]В колонке слева выберите "Фокус". [12193]Переключите опцию "Активный экран следует за мышью".[12194]Если другие настройки по умолчанию не указаны, окна появляются на текущем активном экране. С помощью процедуры, описанной выше, положение мыши определяет этот активный экран.[113087].
0
27.01.2020, 20:06

Теги

Похожие вопросы