生成窗口标题涉及哪些文件?例如,如果打开Rhythmbox,您会看到程序名称作为窗口标题。但是它不是由.desktop
文件生成的。我需要编辑哪些文件以将文本添加到应用程序的标题?我希望更改是永久的
我将Ubuntu GNOME 15.04与GNOME 3.16一起使用。
初始名称通常由应用程序本身(中的代码)设置。但是,您可以更改它,例如,通过使用xdotool
,您必须先安装它:
sudo apt-get install xdotool
然后,一旦安装完毕,您可以通过(例如)以下命令来设置另一个窗口名称:
xdotool search --name "Unity LauncherSwitcher" set_window --name "Monkey"
这将改变:
进入:
如您所见,该命令存在于:
xdotool search --name "<current_name>" set_window --name "<new_name>"
在<current_name>
具有完全匹配。
根据您的评论,我知道上面的命令不起作用。我用不同的应用程序对其进行了测试,并且可以正常工作...
但是由于某种原因,我不明白,不能与Rhytmbox
(!!可能是一个错误)
一种替代方法是使用wmctrl
,您还必须安装:
sudo apt-get install wmctrl
然后使用以下命令:
xprop -id "$(wmctrl -l | grep 'Rhythmbox' | awk '{ print $1 }')" -set WM_NAME "Music"
我成功地在上进行了测试Rhythmbox
:
如前所述,默认窗口名称在应用程序的代码中定义。
更改默认窗口标题将需要更改代码。如果代码可用,在很多情况下需要重新编译,并且取决于所使用的语言,则可以这样做。我认为,一般性的指导是完全不可能的,并且超出(超出)非盟的范围。
在最初的问题中,您想知道是否存在某种文件来设置特定应用程序的新窗口的标题。如前所述,不是这种情况,但是可以创建它。
在下面的设置中,您可以轻松地在每个应用程序基础上定义新窗口的命名方式。只需在~
(您的主目录)中创建一个名为的文件window_names.txt
。对于要为其设置特定窗口名称的每个应用程序,在其后依次添加一行应用程序和所需的窗口名称:
文本文件,定义每个应用程序的窗口名称
gnome-terminal Monkey eats
gedit Banana
rhythmbox if he runs out of peanuts
该设置存在一个简单的后台脚本。该脚本非常轻巧,因此对性能不会有任何明显的影响。
脚本启动后,它将读取文件~/window_names.txt
并为每个应用程序加载设置。然后,它会关注新创建的窗口。如果出现一个属于文件中定义的应用程序之一的窗口,它将相应地设置窗口名称。
该脚本同时使用wmctrl
和xdotool
:
sudo apt-get install wmctrl
sudo apt-get install xdotool
将脚本复制到一个空文件中,另存为 setwindowname.py
创建文件~/window_names.txt
(完全命名为window_names.txt
),然后以以下格式添加您的应用程序:
<application> <window_name>
例如
gedit Text editor
窗口名称可能包含空格。
通过以下命令从终端测试脚本:
python3 /path/to/setwindowname.py
如果一切正常,请将其添加到启动应用程序:Dash>启动应用程序>添加
请注意,在某些情况下,如果在桌面尚未完全加载时启动脚本,则脚本可能会中断。如果是这样的话,添加到启动应用程序的命令将是:
/bin/bash -c "sleep 15&&python3 /path/to/setwindowname.py"
#!/usr/bin/env python3
import subprocess
import time
import os
f = os.environ["HOME"]+"/"+"window_names.txt"
change = []
lines = open(f).read().splitlines()
for l in lines:
try:
change.append([l.split()[0], (" ").join(l.split()[1:])])
except IndexError:
pass
get = lambda cmd: subprocess.check_output(cmd).decode("utf-8").strip()
curr_1 = []
while True:
try:
curr_2 = get(["wmctrl", "-lp"]).splitlines()
new = [w for w in curr_2 if not w in curr_1]
for item in new:
line = item.split(); pid = line[2]
procs = get(["ps", "-e"]).splitlines()
match = [l for l in procs if pid in l][0]
for app in [app for app in change if app[0] in match]:
subprocess.Popen(["xdotool", "set_window", "--name", app[1], line[0]])
curr_1 = curr_2
time.sleep(0.3)
except:
pass
~/window_names.txt
被编辑,则脚本需要重新启动。sudo
。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句