Как открыть два экземпляра режима киоска Chrome на разных дисплеях (Windows)

Мы разрабатываем веб-приложение, которое должно открываться в двух разных экземплярах браузера, каждый на отдельном экране. Очевидно, что компьютер, который мы используем, уже имеет двойной дисплей, и оба монитора имеют одинаковый размер и разрешение.

Идея состоит в том, что, как только Windows запускается, два приложения должны немедленно открываться в полноэкранном режиме, наш предпочтительный браузер - Chrome, так как он рассчитывает на несколько команд, которые могут помочь нам выполнить задачу.

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

Ярлыки имеют эту цель:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\temp --kiosk www.domain.com --new-window "%1" --window-position=0,0

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\temp --kiosk www.domain2.com --new-window "%2" --window-position=1680,0

Чтобы открыть два экземпляра, chromes должен создать временный файл с информацией об открытии экземпляра. (--user-data-dir=c:\temp)

Мы пытались использовать (--window-position=1680,0), чтобы указать, где открывать экземпляр, но кажется, что Chrome отдает приоритет последней позиции, где был открыт последний экземпляр, поэтому оба экземпляра открываются в одном и том же окне независимо от команды.

Мы нашли этот сайт со списком всех доступных команд, но этот список огромен, и мы даже не знаем, что ищем:

http://peter.sh/experiments/chromium-command-line-switches/

Я нашел эту команду: --display=:0.0 | --display=:0.1 Но, похоже, это не работает, или я не правильно его использую

Есть идеи? Благодарю.

4 ответа

Решение

У меня та же проблема. Этот ответ: /questions/14983084/zapustit-prilozhenie-i-otpravit-ego-na-vtoroj-monitor/14983092#14983092 вдохновил меня на создание собственного скрипта PowerShell для более легкого использования.

вскоре

Скрипт делает следующее:

  1. Запустите экземпляр Chrome через скрипт
  2. Теперь используйте WinApi, чтобы найти запущенное окно и переместить его на нужный экран.
  3. Отправьте клавишу F11 в перемещенное окно, чтобы сделать его полноэкранным (мы могли бы запустить Chrome уже в полноэкранном режиме, но перемещение окон в этом режиме было бы не так тривиально)
  4. Сделайте то же самое с другими экземплярами, указав необходимый URL.

Финальный сценарий

Определения функций скрыты в Dll и в другом вспомогательном скрипте. (скачайте их с GitHub по ссылке выше)

$chromePath = 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
$chromeArguments = '--new-window --incognito'

# &taskkill /im chrome* /F 
Chrome-Kiosk 'http://google.com' -MonitorNum 1 
Chrome-Kiosk 'http://http://www.bbc.com/' -MonitorNum 2 

Этот код работал нормально для меня:

start C:\Users\terminal\AppData\Local\Google\Chrome\Application\chrome.exe --app="http://www.domain1.com" --window-position=0,0 --kiosk --user-data-dir=c:/monitor1

start C:\Users\terminal\AppData\Local\Google\Chrome\Application\chrome.exe --app="http://www.domain2.com" --window-position=1680,0 --kiosk --user-data-dir=c:/monitor2

Я думаю, что порядок параметров является актуальным.

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

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:/screen1 --start-fullscreen --new-window www.domain.com --new-window "%1" --window-position=0,0

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:/screen2 --start-fullscreen --new-window www.domain2.com --new-window "%2" --window-position=1680,0

Обратите внимание, я также использовал --start-fullscreen вместо киоска и --new-window. Вы можете или не можете нуждаться в них.

Вот как это сделать с Raspberry Pi/linux. Эти строки нужно добавить в /home/pi/.config/lxsession/LXDE-pi/autostart

@chromium-browser --kiosk --incognito --user-data-dir=/home/pi/.config/chromium-display1 --window-position=0,0 https://bing.com 

@chromium-browser --kiosk --incognito --user-data-dir=/home/pi/.config/chromium-display2 --window-position=1921,0 https://google.com

Если вам нужно узнать разрешение экрана, перейдите в "Настройки"> "Конфигурация экрана".

Мне очень трудно найти ответ самому.

Наиболее близким к легкому решению, поскольку вы работаете с Windows, я смог найти создание пакетного файла +VBScript, который будет эмулировать комбинацию клавиш Win+Arrow-keys для перемещения окна на 2-й экран. Вот очень хорошо написанная статья Tech-net (я думаю, что ярлык специфичен для Win-7, но есть и ярлыки производителей видеокарт)

Тем не менее, я нашел программу, которая на другом форуме утверждает, что вы можете создавать ярлыки приложений, которые запускаются в определенном окне с именем DisplayFusion.

Вы также можете использовать утилиту командной строки, упомянутую здесь в Superuser <--- Вероятно, самый быстрый метод

Надеюсь, что все это помогает,

Я запустил ту же проблему и получил хорошее решение с флагами командной строки. Решение из /questions/42905376/kak-otkryit-dva-ekzemplyara-rezhima-kioska-chrome-na-raznyih-displeyah-windows/42905381#42905381 также работает очень хорошо, но оно требует некоторой настройки каждый раз, когда я хочу установить новые станции с несколькими мониторами, и у меня нет именованных значков для каждого приложения.

Я использую комбинацию некоторых флагов командной строки, и она работает:

Монитор 1:

--user-data-dir=C:\temp\App1
--app="http://appxy.appserver.my?station=PC-MYWORKSTATION&theme=dark"
--incognito
--window-position=0,0
--start-fullscreen

Монитор 2:

--user-data-dir=C:\temp\App2
--app="http://appxy.appserver.my?station=PC-MYWORKSTATION&theme=light"
--incognito
--window-position=2560,0
--start-fullscreen

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

Чтобы упростить настройку, я написал скрипт powershell, который создает только ярлык со значком:

# Example Call:
#
# Monitor 1
# .\createShortcut.ps2 -AppName "MyApp 1" -AppPath "http://google.com" -StartFullScreen $true -WindowPosition "0,0"
# .\createShortcut.ps2 -AppName "MyApp 1" -AppPath "http://google.com" -AppIcon "\\domain.local\icons\myapp.ico" -StartFullScreen $true -WindowPosition "0,0"
#
# Monitor 2
# .\createShortcut.ps2 -AppName "MyApp 2" -AppPath "http://google.com" -StartFullScreen $true -WindowPosition "2560,0"
# .\createShortcut.ps2 -AppName "MyApp 2" -AppPath "http://google.com" -AppIcon "\\domain.local\icons\myapp.ico" -StartFullScreen $true -WindowPosition "2560,0"

param(
  [string]$AppName,
  [string]$AppPath,
  [string]$AppIcon,
  [boolean]$StartFullscreen,
  [string]$WindowPosition
)

$AppArgs = " --incognito";

if($WindowPosition) {
  $AppArgs += " --window-position=$WindowPosition"
}

if($StartFullscreen -eq $true) {
  $AppArgs += " --start-fullscreen"
}

$userDir = "C:\temp\$AppName"
Write-Host "Create Folder:"$userDir
New-Item -ItemType directory -Path $userDir -Force > $null
$scArguments = "--user-data-dir=`"$userDir`" --app=`"$AppPath`"$AppArgs"

Write-Host "Argmunets: $scArguments"
$Shell = New-Object -ComObject WScript.Shell
$ShortCut = $Shell.CreateShortcut("$env:USERPROFILE\Desktop\$AppName.lnk")
$ShortCut.TargetPath = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
$ShortCut.Arguments = $scArguments
$ShortCut.WorkingDirectory = "C:\Program Files (x86)\Google\Chrome\Application"
$ShortCut.WindowStyle = 1
if ($AppIcon.Length -gt 0) {
  $ShortCut.IconLocation = $AppIcon
}
$shortCut.Save()

Я надеюсь, что это решение поможет всем, кто ищет подобное решение.

Последнее, но не менее важное, что делает этот сценарий?

  • молча создает user-data-dir
  • Concats параметры командной строки
  • создает ярлык со значком (необязательно) на рабочем столе
Другие вопросы по тегам