移动VLC DBus插件
sudo mv /usr/lib/vlc/plugins/control/libdbus_plugin.so /usr/lib/vlc/plugins/control/libdbus_plugin.so.backup
打开dconf-editor
,从以下位置删除vlc.desktop
:
/com/canonical/indicator/sound/interested-media-players
或者通过终端重置:
dconf reset /com/canonical/indicator/sound/interested-media-players
注意:某些人可能喜欢修改声音指示器菜单,以隐藏非活动播放器的控件或在关闭后删除。换句话说,正在运行的播放器具有完全的控制,关闭的播放器只有启动程序(没有控制按钮),或者完全从菜单中消失。
interested-media-players
)项目列表中,删除您不需要/不想在菜单中显示的应用程序。关闭dconf编辑器。
防止VLC在声音菜单中重新出现(14.04)
该解决方案将VLC从声音菜单中移除,但如果您启动VLC,它将再次出现在声音菜单中。下面的脚本无法阻止这一点,但会在关闭VLC后立即自动将其移除。
使用方法:
复制下面的脚本,粘贴到一个空的文本文件中,并将其保存为vlc
,使其可执行。然后将/usr/share/applications
目录中的vlc.desktop
文件复制到~/.local/share/applications
,并将以Exec=
开头的(第一行)替换为Exec=/path/to/script/vlc
。退出并重新登录。桌面文件将被重定向到脚本,脚本将启动VLC并等待其停止,并立即从声音菜单中移除VLC。
#!/usr/bin/python3
import subprocess
import getpass
import time
curruser = getpass.getuser()
def read_currentmenu():
# read the current launcher contents
get_menuitems = subprocess.Popen([
"gsettings", "get", "com.canonical.indicator.sound", "interested-media-players"
], stdout=subprocess.PIPE)
return eval((get_menuitems.communicate()[0].decode("utf-8")))
def set_current_menu(current_list):
# preparing subprocess command string
current_list = str(current_list).replace(", ", ",")
subprocess.Popen([
"gsettings", "set", "com.canonical.indicator.sound", "interested-media-players",
current_list,
])
subprocess.call(["/usr/bin/vlc"])
current_list = read_currentmenu()
for item in current_list:
if item == "vlc.desktop":
current_list.remove(item)
set_current_menu(current_list)
其他应用
这种方法/脚本也可以用于声音菜单中的其他应用程序。然后,根据其他应用程序,需要修改脚本最后一节中的两行:
if item == "vlc.desktop": (change to desktop file of the application)
并且
subprocess.call(["/usr/bin/vlc"]) (change the command to run the application)
打开终端应用程序,然后复制、粘贴并执行以下命令之一。之后,当VLC退出后,声音指示器将自动清除。
不要在声音指示器中留下任何条目: (mkdir -p ~/.local/share/applications);(cp /usr/share/applications/vlc.desktop ~/.local/share/applications);(sed -i 's/Exec=\/usr\/bin\/vlc --started-from-file %U/Exec=sh -c "\/usr\/bin\/vlc --started-from-file %U; gsettings reset com.canonical.indicator.sound interested-media-players"/' ~/.local/share/applications/vlc.desktop)
是什么以及它的功能
该解决方案由一个从启动(登录)运行的脚本组成。它允许用户定义的应用程序出现在声音菜单中,但在这些应用程序关闭后将其从声音菜单中移除。
该脚本对桌面文件的功能没有影响。我没有注意到对处理器负载有任何影响,内存使用量可以忽略不计。
如何使用
将下面的脚本复制到一个空文件中,保存为cleanup_soundmenu.py
在以no_show =
开头的行中,设置应该在关闭后从菜单中清除的应用程序。设置了两个示例:['rhythmbox', 'vlc']
。名称来自它们的桌面文件,去掉了.desktop
。
在以cleanup_interval
开头的行中,用户可以定义清理检查之间的时间间隔。默认为10秒。
将以下行添加到启动应用程序
(Dash > 启动应用程序 > 添加):
python3 /path/to/cleanup_soundmenu.py
#!/usr/bin/env python3
import subprocess
import time
import getpass
no_show = ['rhythmbox', 'vlc'] # add names here, to set apps not to show
cleanup_interval = 10 # cleanup interval (in seconds)
curruser = getpass.getuser()
def createlist_runningprocs():
processesb = subprocess.Popen(
["ps", "-u", curruser],
stdout=subprocess.PIPE)
process_listb = (processesb.communicate()[0].decode("utf-8")).split("\n")
return process_listb
def read_soundmenu():
# read the current launcher contents
get_menuitems = subprocess.Popen([
"gsettings", "get",
"com.canonical.indicator.sound",
"interested-media-players"
], stdout=subprocess.PIPE)
try:
return eval(get_menuitems.communicate()[0].decode("utf-8"))
except SyntaxError:
return []
def set_soundmenu(new_list):
# set the launcher contents
subprocess.Popen([
"gsettings", "set",
"com.canonical.indicator.sound",
"interested-media-players",
str(new_list)])
def check_ifactionneeded():
snd_items = read_soundmenu()
procs = createlist_runningprocs()
remove = [item+".desktop" for item in no_show if not item in str(procs)]
if len(remove) != 0:
for item in remove:
try:
snd_items.remove(item)
except ValueError:
pass
return snd_items
else:
pass
while 1 != 0:
new_list = check_ifactionneeded()
if new_list != None:
set_soundmenu(new_list)
time.sleep(cleanup_interval)