我尝试使用 Docky,然后我将其删除,之后我的浏览器(Chromium)无法以最大高度打开,每次我都应该自己最大化它。(XFCE 桌面)
答案1
如何启动最大化的应用程序(任意)
通过下面的脚本启动应用程序,你可以强制任何应用程序*
最大化启动。如果您替换主要的通过命令在文件(的副本)中.desktop
运行该脚本(请参阅下文如何执行此操作)或将其添加为快速列表快捷方式,您就可以实现您想要的效果。
(*
有些应用程序具有固定的、不可更改的窗口大小,有些窗口会在可能已经打开的窗口中打开新选项卡)
关于脚本
该脚本使用以下命令运行:
python3 /path/to/script <application>
剧本:
- 首先运行命令来打开应用程序
- 为了防止时间问题,它会等待应用程序(新)窗口出现在 -command的输出中(通过在其
pid
和相应窗口之间找到匹配项) (仅 15 秒,以防止无限循环)id
wmctrl -lp
一旦窗口出现,它会使用以下命令最大化窗口:
xdotool windowsize <window_id> 100% 100%
代码
#!/usr/bin/env python3
import subprocess
import getpass
import time
import sys
app = sys.argv[1]
user = getpass.getuser()
get = lambda x: subprocess.check_output(x).decode("utf-8")
ws1 = get(["wmctrl", "-lp"]); t = 0
subprocess.Popen(app)
while t < 30:
ws2 = [(w.split()[2], w.split()[0]) for w in get(["wmctrl", "-lp"]).splitlines() if not w in ws1]
procs = sum([[(w[1], p) for p in get(["ps", "-u", user]).splitlines() \
if app[:15].lower() in p.lower() and w[0] in p] for w in ws2], [])
if len(procs) > 0:
subprocess.call(["xdotool", "windowsize", "-sync", procs[0][0] , "100%", "100%"])
break
time.sleep(0.5)
t = t+1
如何使用
脚本
wmctrl
需要xdotool
sudo apt-get install wmctrl xdotool
将上述脚本复制到一个空文件中,另存为
run_maximized.py
现在编辑您的
.desktop
文件:将全局
.desktop
文件复制到本地:cp /usr/share/applications/chromium-browser.desktop ~/.local/share/applications
XFCE 版本:
使用 gedit 打开文件:
gedit ~/.local/share/applications/chromium-browser.desktop
浏览至以下行:
Exec=chromium-browser %U
(这是第一行,以
Exec=
改成:
Exec=python3 /path/to/script.py chromium-browser
您需要
/path/to/script.py
用实际路径替换其中。注销并重新登录。从现在开始,您的 Chromium 启动器将最大化打开 Chromium。
Unity 版本:
使用 gedit 打开文件:
gedit ~/.local/share/applications/chromium-browser.desktop
浏览至以下行:
Actions=NewWindow;Incognito;TempProfile;
改成:
Actions=NewWindow;Incognito;TempProfile;divider1;Open maximized;
在文件的最底部添加以下部分:
[Desktop Action Open maximized] Name=Open maximized Exec=python3 /path/to/script.py chromium-browser OnlyShowIn=Unity; [Desktop Action divider1] Name=..................................... OnlyShowIn=Unity;
您需要
/path/to/script.py
用实际路径替换其中。注销并重新登录。从现在开始,您的 Chromium 启动器如下所示:
重要的提示
在.desktop
文件中,您必须例如,使用绝对路径;~
不起作用。这适用于.desktop
中的文件/usr/share/applications
,~/.local/share/applications
以及启动应用程序中的命令(实际上由.desktop
中的文件调用~/.config/autostart
)。
答案2
虽然这并非 100% 万无一失,但更简单的方法是修改Exec=
现有.desktop
文件中的行并直接在那里运行xdotool search --sync
。这会等待窗口被映射,并避免硬编码延迟。并不是贬低辛苦的工作Jacob 将其放入 Python 脚本中, 但它做对于 shell 中本质上只有一行代码的东西来说,这似乎太昂贵了。
下面是一个例子,使用点菜(系统菜单的 GUI 编辑器):
Exec=sh -c 'alacarte & xdotool search --sync --onlyvisible --class alacarte windowsize 100%% 100%%'
请注意,&
这至关重要,它将应用程序置于后台。还请注意%
必须转义为%%
在密钥内Exec
。
.desktop
我说的“并非 100% 万无一失”是指手动编辑文件的过程很容易出现拼写错误,而且如果你搞砸了某些事情,你不太可能从任何地方得到好的错误消息。你通常只会得到......什么都没有。该实用程序dex
(可在“universe”存储库中找到)可以.desktop
直接从 shell 运行文件,其-v
选项可能有助于调试。
它是可以.desktop
直接/usr/share/applications
(以 root 身份)编辑文件,但最好使用 Alacarte 或自由菜单在 中创建一个~/.local/share/applications
,这样您的更改就不会被将来的软件包更新覆盖。两者都应该可以从 Ubuntu 及其衍生产品上的“universe”存储库中获得。
最后,如果您.desktop
手动编辑文件,请update-desktop-database
在包含目录中运行以更新缓存,否则可能看起来什么都没有发生。