【问题标题】:i3 wm: start my application on a specific screen and give it focus & move the mouse therei3 wm:在特定屏幕上启动我的应用程序并为其提供焦点并将鼠标移动到那里
【发布时间】:2019-09-04 14:23:21
【问题描述】:

我搜索了几个论坛,总能找到部分答案,但似乎没有一个能解决我的问题。

我正在台式 PC 上开发自己的游戏(顺便说一句。我使用 Arch ;-))有两个屏幕和 i3 窗口管理器。我在右侧(正方形 1:1)屏幕上开发,我想在编译后在左侧(16:9)屏幕上打开我的游戏。我可以通过在编译期间始终将鼠标移动到左侧屏幕来模拟这一点,以便游戏在那里打开,但是我需要打开一个空的工作区才能移动到。

我可以在 i3-config 文件中找到解决方案,在该文件中我可以在特定工作区(不一定是特定监视器)上专门打开具有特定类名的窗口,之后我当然不能给它焦点那个。

我希望能够只使用命令行命令来完成它:我在 vim 中开发并有一个热键来启动我的 make&run 脚本。当没有编译器错误时,该脚本将运行应用程序。如果该命令可以扩展为“并将其放在空工作区中的左侧监视器上并通过将鼠标移到那里来获得焦点”,那就太好了。

一个可靠的 i3-config 解决方案也可以,甚至更好,因为我不需要笔记本电脑上的功能。

如果有帮助的话,我不介意为我的游戏保留一个特定的工作空间。

有人吗?

【问题讨论】:

    标签: window placement i3


    【解决方案1】:

    我可以在 i3-config 文件中找到解决方案,我可以在特定工作区(不一定是特定监视器)上专门打开具有特定类名的窗口,我当然不能(原文如此?)之后给它重点。

    (注意:这里的“不是”是错字吗?我有点困惑)。

    就使用配置文件的解决方案而言,您已经成功了一半。您唯一需要做的就是在您选择的显示器上拥有该工作区。

    这是一个完整的解决方案(带有配置文件),包括您已经解决的步骤:

    1。为您的游戏指定一个工作空间

    由于您可以根据需要创建任意数量的工作区,因此没有任何缺点。

    assign [class="MyGame"] game
    

    2。将此工作区分配给您的左侧屏幕

    首先,您需要知道带有xrandr 的屏幕名称(Arch 上的xorg-xrandr 包)。

    这是我的设置中的示例输出:

    $ xrandr
    
    Screen 0: minimum 8 x 8, current 2560 x 2520, maximum 32767 x 32767
    eDP1 connected primary 1920x1080+0+1440 (normal left inverted right x axis y axis) 310mm x 170mm
       1920x1080     60.00*+  59.93    48.00  
       1680x1050     59.95    59.88  
       1400x1050     59.98  
       1600x900      60.00    59.95    59.82  
       1280x1024     60.02  
       1400x900      59.96    59.88  
       1280x960      60.00  
       1368x768      60.00    59.88    59.85  
       1280x800      59.81    59.91  
       1280x720      59.86    60.00    59.74  
       1024x768      60.00  
       1024x576      60.00    59.90    59.82  
       960x540       60.00    59.63    59.82  
       800x600       60.32    56.25  
       864x486       60.00    59.92    59.57  
       640x480       59.94  
       720x405       59.51    60.00    58.99  
       640x360       59.84    59.32    60.00  
    DP1 disconnected (normal left inverted right x axis y axis)
    DP2 connected 2560x1440+0+0 (normal left inverted right x axis y axis) 550mm x 310mm
       2560x1440     59.95*+
       2048x1080     60.00    24.00  
       1920x1080     60.00    50.00    59.94  
       1920x1080i    60.00    50.00    59.94  
       1600x1200     60.00  
       1280x1024     75.02    60.02  
       1152x864      75.00  
       1280x720      60.00    50.00    59.94  
       1024x768      75.03    60.00  
       800x600       75.00    60.32  
       720x576       50.00  
       720x480       60.00    59.94  
       640x480       75.00    60.00    59.94  
       720x400       70.08  
    HDMI1 disconnected (normal left inverted right x axis y axis)
    HDMI2 disconnected (normal left inverted right x axis y axis)
    VIRTUAL1 disconnected (normal left inverted right x axis y axis)
    

    就我而言,eDP1 是我的主要(笔记本电脑)显示器,DP2 是我的外接显示器。

    如果我想在外接显示器上使用工作区 game,我会使用:

    workspace game output DP2
    

    3。创建一个键绑定来运行您的“make&run script”并将焦点和鼠标移动到您的游戏工作区

    bindsym <my-bind> exec --no-startup-id <make&run script>; workspace game
    

    您不是使用 vim 热键,而是使用 i3 键绑定来运行脚本(这将打开应用程序,并且由于上述设置,应用程序将在正确的监视器中打开)并将焦点移到该监视器:

    让 i3 执行命令很容易,但很难让命令移动鼠标并集中注意力(因为这是 wm 或桌面环境的任务)。


    我能想到这种方法的一个缺点:

    当您遇到编译器错误时,您的焦点和鼠标仍会跳转到左侧显示器。如果经常发生,您可能会觉得这很烦人。


    我从一个工作区跳到另一个工作区的方法是,我有一个命名工作区列表和简单的助记键绑定来访问它们。

    所以我会处理这件事,而不是让一个键绑定(或你问的命令)做整个事情:

    • 我会有一个工作区,里面有一堆我一直想要在左显示器上的应用程序
    assign [class="MyGame"] workspaceleft
    assign [class="App1"] workspaceleft
    assign [class="App2"] workspaceleft
    assign [class="App3"] workspaceleft
    
    workspace workspaceleft output <left-monitor-name-given-by-xrandr>
    workspace workspacevim output <right-monitor-name-given-by-xrandr>
    
    • 并且我将有一个简单的键绑定来转到该工作区(以及其他人转到我的其他工作区。所以我也将有键绑定返回到 or ,这取决于您是否希望每个工作区有一个应用程序或每台显示器只有一个工作区等)
    bindsym <bind1> workspaceleft 
    bindsym <bind2> workspacevim
    

    所以我会在 vim 中工作并使用 vim 热键。如果编译成功,由于我们的早期设置,游戏将在正确的显示器上运行。然后我会按&lt;bind1&gt; 来访问它(然后按&lt;bind2&gt; 在我想返回到右侧监视器时)。

    我认为这可能比全能键绑定更方便。

    另外,能够通过按键跳转到任何应用程序,并让我的所有应用程序默认登陆我想要的位置和我想要的方式是我真正喜欢 i3 的事情之一。因此,设置此类内容可能会使您的工作流程在此特定应用程序旁边变得更好。


    或者,您可以使用键绑定在监视器之间切换:

    bindsym <bind> focus output left
    

    (请注意,这里的“left”不是工作区名称,而是方向。这将在彼此相邻的监视器之间切换。如果它们在彼此之上,请将“left”替换为“up”)。

    【讨论】:

      猜你喜欢
      • 2023-01-01
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多