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

Linux 窗口 最大化 设置

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

    我想给所有 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 放到桌面左边然后所有窗口最大化都不会遮挡
    FurN1
        19
    FurN1  
       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
    ```
    hanss
        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/xorgdocs/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 友除夕夜快乐,祝身体一直健康棒棒。
    FurN1
        31
    FurN1  
       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     Solana     2259 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 02:04 PVG 10:04 LAX 18:04 JFK 21:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86