【问题标题】:How to open two instances of Chrome kiosk mode in different displays (Windows)如何在不同的显示器中打开两个 Chrome 信息亭模式实例 (Windows)
【发布时间】:2015-05-31 09:20:37
【问题描述】:

我们正在开发一个 Web 应用程序,该应用程序需要在两个不同的浏览器实例中打开,每个实例在不同的屏幕上。显然我们使用的电脑已经有双屏了,而且两台显示器的尺寸和分辨率都是一样的。

我们的想法是,一旦 Windows 启动,这两个应用程序应该立即全屏打开,我们首选的浏览器是 Chrome,因为它有几个命令可以帮助我们完成任务。

我们已经成功地在启动程序中添加了两个快捷方式,可以在 kiosk 模式下打开两个实例,但我们无法选择在哪个显示器上打开。

快捷方式有这个目标:

"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 但它似乎不起作用或者我没有正确使用它

有什么想法吗? 谢谢。

【问题讨论】:

    标签: google-chrome fullscreen multiple-monitors kiosk-mode


    【解决方案1】:

    我自己也很难找到答案。

    由于您运行的是 Windows,我能找到的最简单的解决方案是创建一个 批处理文件 +VBScript,该文件将模拟 Win+箭头键快捷方式来移动窗口到第二个显示。 Here's a very well-written Tech-net Article(我相信快捷键是Win-7特有的,但也有显卡制造商的快捷键)

    但是,我确实找到了另一个论坛声称您可以创建应用程序快捷方式的程序,该程序可以在名为 DisplayFusion 的特定窗口中启动,check it out

    您还可以在超级用户上使用here 提到的命令行实用程序可能是最快的方法

    希望这对你有帮助,

    【讨论】:

      【解决方案2】:

      我也有同样的问题。这个答案:https://stackoverflow.com/a/3750187/1305565 启发了我创建自己的 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 chrome --new-window @987654324 @ --window-position=0,0 --user-data-dir=c:/monitor1 Timeout /t 10 /nobreak >nul 2>&1 start chrome --new-window domain/#/mvp --window-position=2800 ,0 --user-data-dir=c:/monitor1
      【解决方案3】:

      最简单的方法是使用 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 而不是 kiosk 和 --new-window。你可能需要也可能不需要。

      【讨论】:

      • 很好的建议。对于那些喜欢复制/粘贴的人来说,这里是将要粘贴到批处理文件中的文本。我还将第一行添加到 Kiosk 中(这始终是您的主窗口,它忽略位置属性),因此不显示开始菜单。 START chrome --user-data-dir=C:\TEMP\acc1 --start-fullscreen --new-window www.wayfair.com --kiosk --new-window "%1" START chrome --user-data-dir=C:\TEMP\acc2 --start-fullscreen --new-window www.bbc.com --new-window "%2" --window-position=0,1680 EXIT 只需确保每个 START 都在新行,EXIT 也在新行。
      【解决方案4】:

      这段代码对我来说很好用:

      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
      

      我认为参数的顺序是相关的。

      【讨论】:

      • 在尝试了一些更复杂但不起作用的方法后,这种方法对我来说非常有效。谢谢!
      • 这对我有用,但单独的数据目录确实意味着两个窗口不能共享 cookie 等,这对人们来说可能是一种痛苦(它们是两个单独的会话)跨度>
      【解决方案5】:

      我遇到了同样的问题,并使用命令行标志设置了一个很好的解决方案。 https://stackoverflow.com/a/29646543/3634274 的解决方案也很好用,但每次我想安装新的多显示器站时都需要进行一些设置,而且我没有每个应用程序的命名图标。

      我使用了一些命令行标志的组合,它可以工作:

      监视器 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()
      

      我希望这个解决方案可以帮助所有寻找类似解决方案的人。

      最后但并非最不重要的一点是这个脚本是做什么的?

      • 静默创建用户数据目录
      • 连接命令行参数
      • 在桌面上创建带有图标(可选)的快捷方式

      【讨论】:

        【解决方案6】:

        以下是使用 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
        

        如果您需要找到您的屏幕分辨率,请转至首选项 > 屏幕配置。

        【讨论】:

          猜你喜欢
          • 2019-01-11
          • 2015-10-20
          • 2016-12-28
          • 1970-01-01
          • 2015-05-14
          • 1970-01-01
          • 2017-06-23
          • 2021-07-15
          • 2016-01-14
          相关资源
          最近更新 更多