V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
hanssx
V2EX  ›  Linux

Linux 窗口 最大化 设置

  •  
  •   hanssx · 2021-02-08 11:22:18 +08:00 · 3070 次点击
    这是一个创建于 1402 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想给所有 Linux 窗口的最大化操作进行设置,包括不限于资源管理器、Chrome 、WPS 、Pycharm 、VSCode 。 具体就是想给 Linux 桌面最左侧留一块 Windows 任务栏的空间,以便存放装有 Windows 虚拟机的 VirutalBox 开启 Seamless 之后把 Windows 虚拟机的任务栏放到最左侧,而不让 Linux 所有窗口覆盖它,使其与 Linux 窗口“无缝”拼接。

    然后再把 Windows 虚拟机的颜色调整一下,左侧和下侧分别是 Windows 虚拟机和 Linux 宿主机的任务栏,爽!

    第 1 条附言  ·  2021-06-28 10:15:55 +08:00
    [2021-06-28] 目前在用 i3wm+https://github.com/Gomaxx/goma-virtualbox-extension 推送
    32 条回复    2021-02-12 00:16:04 +08:00
    kid740246048
        1
    kid740246048  
       2021-02-08 11:37:23 +08:00
    同蹲一个解决方案,最近我也在考虑把开发环境迁移到 Arch+KDE
    huangmingyou
        2
    huangmingyou  
       2021-02-08 11:55:10 +08:00   ❤️ 1
    我用 fvwm,把 virtualbox 的窗口边框去掉了,里面的 windows 看上去就像原生的 linux 应用。不用开启 seamless 模式。
    windows 里面开微信最大化,观感就是微信原生跑在 linux 上一样。

    https://imgur.com/TCa9Si5
    zhuisui
        3
    zhuisui  
       2021-02-08 12:02:40 +08:00   ❤️ 1
    no1xsyzy
        4
    no1xsyzy  
       2021-02-08 12:16:04 +08:00   ❤️ 1
    歪下:i3wm (
    hanssx
        5
    hanssx  
    OP
       2021-02-08 14:22:03 +08:00
    @huangmingyou
    @zhuisui
    @no1xsyzy
    搜了一下,大佬们给的答案好像都是窗口管理器,看了一下没看太懂,确实能做到吗,我都想付费求方案了,我研究一下。
    no1xsyzy
        6
    no1xsyzy  
       2021-02-08 14:44:57 +08:00
    @hanssx 因为管这事儿的就是 WM
    想了想确实 FVWM 应当是有这个能力的。i3 是完整的 DE……
    hanssx
        7
    hanssx  
    OP
       2021-02-08 14:52:57 +08:00
    @huangmingyou 老哥,你这个是不是需要换窗口管理器呀,我默认用的 mint cinamon 桌面环境,是 mutter 窗口管理器。另外,你这个是把虚拟机窗口直接铺出来是吧,是需要多屏效果才能比较好吧?我只想要任务栏看消息,然后是笔记本没那么大横屏。


    @zhuisui 看了下,好像是 KDE 的。
    huangmingyou
        8
    huangmingyou  
       2021-02-08 14:53:27 +08:00
    https://github.com/huangmingyou/fvwm-rio 这是我在用的 fvwm 配置文件
    hanssx
        9
    hanssx  
    OP
       2021-02-08 14:54:25 +08:00
    @no1xsyzy 好的,给大佬跪了,我去研究一下,希望能研究出来,hiahia~
    hanssx
        10
    hanssx  
    OP
       2021-02-08 14:56:34 +08:00
    @huangmingyou 有点复杂,待我学习一下,
    dbpe
        11
    dbpe  
       2021-02-08 15:04:35 +08:00
    HIdpi...linux 用哪个发行版比较好啊...我试了一圈..决定还是用 win 了
    hanssx
        12
    hanssx  
    OP
       2021-02-08 16:59:34 +08:00
    @huangmingyou 太难搞了,我放弃了,还是谢谢大哥(感觉 fvwm 现在用得人少了,中文资料都没几个,而且会改变窗口很多行为。。Linux 原本的任务栏都没了。。。
    omph
        13
    omph  
       2021-02-08 18:36:08 +08:00
    对 i3wm 来说,vbox 用平铺模式( tiling ),会自动最大化;而同工作区的其他窗口全都设为浮动( floating,可以作为默认值),然后限定浮动窗口的最大尺寸( floating_maximum_size )。
    更复杂一点,自己写个脚本,开新窗口、移动窗口的时候自动检测并设置窗口尺寸。

    但对于 i3 来说,一般用法就是给 vbox 一个单独的工作区,再给 vbox 绑定一个快捷键,可以一键切换过去。
    omph
        14
    omph  
       2021-02-08 18:37:00 +08:00
    Cooky
        15
    Cooky  
       2021-02-08 18:55:28 +08:00 via Android
    很多 wm 还能把 标题栏 去掉
    Lemeng
        16
    Lemeng  
       2021-02-08 19:22:44 +08:00
    热心人多
    hanssx
        17
    hanssx  
    OP
       2021-02-08 20:41:25 +08:00
    @omph > 更复杂一点,自己写个脚本,开新窗口、移动窗口的时候自动检测并设置窗口尺寸。

    对,就是这个东西,我不知道怎么搞。i3wm 之前用过,感觉屏幕小的话和用多个 workspace 差不多,所以也就没深入使用。
    JackieMe
        18
    JackieMe  
       2021-02-08 22:46:31 +08:00 via Android
    xfce4 和 openbox 好像都可以设置 dock 空间,至少 xfce4 可以把 dock 放到桌面左边然后所有窗口最大化都不会遮挡
    IgniteWhite
        19
    IgniteWhite  
       2021-02-08 22:55:40 +08:00 via iPhone
    wm 常用的分为 stacking 和 tiling 。比如 gnome 和 kde plasma 这些是 stacking,前面人们提到的 i3 之类的是 tiling 。对于楼主的需求,tiling 更适合。
    huangmingyou
        20
    huangmingyou  
       2021-02-09 09:43:58 +08:00
    @hanssx xdotool 看看能实现吗
    hanssx
        21
    hanssx  
    OP
       2021-02-09 10:17:47 +08:00
    @JackieMe
    搜索到过这个东西,同类好像还有 fluxbox,我之前想依靠在宿主机(Linux)最左侧建一个任务栏(Panel)留出一块空间,给 VirtualBox 的 Seamless 模式下的 Windows 用,但是 VirtualBox 的 Seamless 模式下的 Windows 的任务栏,其实是在宿主机(Linux)的可用空间内铺上一块空间而不是最左侧。
    所以只能使 Linux 所有窗口最大化的时候给它限定一个范围,不让它覆盖某一块空间才行。

    @IgniteWhite
    笔记本没那么大,用平铺效果不行,看得费劲,相反如果用显示器,那也就没必要这么做了,我把虚拟机分屏就行了。。

    @huangmingyou
    嗯,这个东西能控制窗口,但是怎么能设置所有窗口呐,没找到相关的,我昨天又看了一下 fvwm,好像它并不能控制所有窗口最大化的时候,不让窗口覆盖某一块空间啊,有这个语法`Style stylename options`,不知道 options 该怎么设置。
    huangmingyou
        22
    huangmingyou  
       2021-02-09 10:46:04 +08:00   ❤️ 1
    实现思路不是最大化窗口,而应该是精确控制窗口大小和位置; 例如
    google-chrome --app="http://www.bing.com" -geometry 2222x1442--5-0
    #
    geometry 具体可以用 xwininfo 获取一个指定窗口的值
    huangmingyou
        23
    huangmingyou  
       2021-02-09 10:47:11 +08:00   ❤️ 1
    我现在的 fvwm 配置,chrome 用 f11 全屏以后,按住 alt 键,用鼠标右键可以再二次调整窗口大小。
    hanssx
        24
    hanssx  
    OP
       2021-02-09 11:29:22 +08:00
    @huangmingyou 这个思路可以,就是比较麻烦,需要设置所有 app 的启动参数,或许编辑~/.Xdefaults 可以解决?但是我发现自己电脑上没这个文件,我电脑 OS 是 Linux Mint19.3 Cinamon 。。
    另外--geometry 这个参数我这边好像对 chrome 没有效果,这样才有效果,
    chromium-browser --window-position=0,0 -window-size=800,600
    这样一来不支持不知道有没有不支持--geometry 参数的。。

    刚才把你的 fvwm2rc 文件直接替换我电脑里面的 fvwm2rc 文件,logout 后找不到 fvwm 了,我好菜,好难啊

    我决定找找看 xdotool 、wmctrl 、--geometry 、Xdefaults 这些方案看看,谢谢大哥。

    参考:
    https://stackoverflow.com/questions/27085805/how-to-specify-geometry-e-g-1280x720-for-a-new-browser-window
    https://unix.stackexchange.com/questions/48984/how-can-i-set-the-position-that-terminal-opens-at
    hanssx
        25
    hanssx  
    OP
       2021-02-09 11:34:37 +08:00
    ```shell
    $ chromium-browser --geometry=1820*972+100+0
    zsh: no matches found: --geometry=1820*972+100+0

    $ chromium-browser -geometry 1820*972+100+0
    zsh: no matches found: 1820*972+100+0

    $ chromium-browser -geometry 1820*972--100-0
    zsh: no matches found: 1820*972--100-0
    ```
    hanssx
        26
    hanssx  
    OP
       2021-02-09 11:48:57 +08:00
    @huangmingyou 找到一种方案,可以用快捷键调整当前活动窗口。

    > i've just found: wmctrl -r :ACTIVE: -e 0,-1,-1,1280,900 and added as a Custom Shortcut within Keyboard Shortcuts settings :) –


    参考: https://askubuntu.com/questions/107951/how-to-set-a-specific-window-size-and-placement-for-all-windows-that-open-to-def
    huangmingyou
        27
    huangmingyou  
       2021-02-09 13:14:54 +08:00   ❤️ 1
    @hanssx 你可以换 bash shell 看看,不确定是不是 shell 的问题。
    ~/.Xresources 里面也可以指定位置和大小
    Rxvt.geometry: 199x70+275-60
    omph
        28
    omph  
       2021-02-10 00:59:13 +08:00   ❤️ 1
    i3wm:

    # 在工作区 1 中新建的窗口,若不是 vbox,则启用浮动,设置宽高,并向右移动
    for_window [class="^(?!virtualbox).*" workspace="1"] floating enable resize set 1400 870 move position 40 px 0 px
    # 限制浮动窗口尺寸
    floating_maximum_size 1400 x 870
    secondwtq
        29
    secondwtq  
       2021-02-10 01:54:59 +08:00   ❤️ 1
    一般确实是在窗口管理器里做。

    比如我用的是 xmonad,这是 Haskell 写的一个非常 primitive 的窗口管理器,稍微熟悉 Haskell 的话,一下午就可以看完核心部分的代码(而如果你想学 Haskell,xmonad 又是非常不错的入门项目)。它本身功能很少,但是非常的简单和稳定。它的特点是完全的 hackable——核心代码只提供很少的功能,而配置文件由用户用 Haskell 自己写,这个配置文件也并非通常意义上的“配置”——它就是一个 Haskell 程序,而窗口管理器的 main 函数,是在这个配置文件里面的!

    比如说这是我的 xmonad 配置文件中的 main 函数:

    > main = do
    > xmonad $ ewmh $ defaultConfig {
    > workspaces = ["pri", "2", "3", "4", "misc"],
    > modMask = mod4Mask,
    > terminal = "xfce4-terminal",
    > normalBorderColor = "#000000",
    > focusedBorderColor = "#e63312",
    > focusFollowsMouse = False,
    > clickJustFocuses = False,
    > borderWidth = 0,
    > layoutHook =
    > logModifier (gaps [(U, 32)] (
    > windowSwitcherDecorationWithButtons shrinkText decorationTheme
    > (
    > smartBorders (spacingRaw True (Border 0 0 0 0) False (Border 0 0 0 0) False (
    > draggingVisualizer (
    > boringWindows (
    > maximizeWithPadding 0 (
    > minimize (
    > layoutHook defaultConfig))))))))),
    > manageHook = myManageHook,
    > handleEventHook = handleEventHook def <+>
    > -- fullscreenEventHook <+>
    > fullscreenEventHook2 <+>
    > minimizeEventHook,
    > -- testEventHook,
    > keys = myKeys
    > }

    这里面需要注意的是几个 hook,比如 layoutHook 中,minimize 和 maximizeWithPadding 负责最小化和最大化功能,boringWindows 可以在切换窗口时无视掉最小化的窗口,draggingVisualizer 和 windowSwitcherDecorationWithButtons 添加了窗口拖动和标题栏等 stacking WM 的功能,smartBorders 可以在窗口最大化时禁用边框的绘制(当然我现在把边框整个禁用了)——这些都是 Haskell 函数,而这些函数一个个嵌套组合起来传进 layoutHook 这个配置项,再调用 xmonad 提供的 xmonad 函数,就是 main 函数。
    layoutHook 中的这些函数不属于 xmonad 核心,而是外部插件,比如这里的 windowSwitcherDecorationWithButtons 我用的是我自己在官方仓库提供的插件的基础上修改过的版本,改出了这么一个标题栏: https://i.loli.net/2021/02/10/aUAFmL7DJOHd54C.png

    注意 Chrome 和 Emacs 的标题栏使用的是不同的背景和字体颜色,实现这个区别的代码就在上面的 Emacs 窗口里。

    ... 但是本回复的目的并非安利 yet another window manager 。说上面这一大堆只是因为貌似推荐 WM 是本贴的标准格式而已 ... 上面 layoutHook 有一个没提就是 gaps,这个可以禁止 xmonad 使用屏幕边框的区域,比如我这个配置中就保留了屏幕上方 32 像素高的位置放状态栏——这是我看到楼主的问题时的本能反应。但是仔细想来,其他窗口管理器也能处理各种 bar 和 dock 的占位,而它们 99% 没有 xmonad 这么强的定制性,这是什么原理呢?
    Gaps 模块的文档( https://hackage.haskell.org/package/xmonad-contrib-0.16/docs/XMonad-Layout-Gaps.html )给出了线索:Gaps 仅仅是一个 workaround,处理“dock-type applications”的占位推荐使用 ManageDocks 提供的功能,这是因为这类窗口一般都设置了“STRUTS”属性。

    xmonad 这个名字中的 X 来自于 X Window,X Window 本身是应用和系统之间通信的一套协议(至于 Monad 嘛,自然是“a monoid in the category of endofunctors”咯)。其中规定窗口和窗口管理器之间通信的主要是 ICCCM (Inter-Client Communication Conventions Manual, https://www.x.org/releases/X11R7.6/doc/xorg-docs/specs/ICCCM/icccm.html ) 和 EWMH (Extended Window Manager Hints, https://specifications.freedesktop.org/wm-spec/wm-spec-1.3.html ),这个 STRUTS,以及“dock-type applications”,属于 EWMH 的范畴。
    xmonad 的 ManageDocks 模块就是通过检查 EWMH 规定的这些属性来实现保留 dock 空间功能的: https://hackage.haskell.org/package/xmonad-contrib-0.16/docs/src/XMonad.Hooks.ManageDocks.html
    类似的处理也出现在 Cinnamon 的默认窗口管理器 muffin 中: https://github.com/linuxmint/muffin/blob/46b555c27a9abf6b4a05f711770786bf4f6a2361/src/core/constraints.c#L863

    所以楼主这个问题,可以考虑的标准解决方案是想办法给任务栏窗口设置 EWMH 相关的属性,之后的布局问题,窗口管理器应该会自动处理。
    hanssx
        30
    hanssx  
    OP
       2021-02-10 19:49:03 +08:00   ❤️ 1
    @omph 可以的老哥,用得很溜,老哥你 i3wm 用的显示屏是多大的呀,我感觉 i3wm 必须得用个大的显示屏。。


    @secondwtq 多谢老哥普及,第一次听说 xmonad,关注老哥了,太硬核了哈哈。



    @huangmingyou
    @omph
    @secondwtq
    @kid740246048
    @zhuisui
    @no1xsyzy
    @JackieMe
    @IgniteWhite
    提前祝各位 v 友除夕夜快乐,祝身体一直健康棒棒。
    IgniteWhite
        31
    IgniteWhite  
       2021-02-10 19:50:21 +08:00 via iPhone   ❤️ 1
    @hanssx 祝新年好运!
    hanssx
        32
    hanssx  
    OP
       2021-02-12 00:16:04 +08:00
    找到另一种方案: https://github.com/Gomaxx/goma-virtualbox-extension
    经测在 Mint 19.3 上面可行,可能在 ubuntu 18.04 系下都能运行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2834 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:49 · PVG 20:49 · LAX 04:49 · JFK 07:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.