Я знаю, что этот вопрос действительно старый, но, пройдя ту же проблему, я думаю, что, наконец, создал обходной путь для этого и решил поделиться с кем-то, у кого есть эта проблема:
не может установить несколько WMClasses для одного файла .desktop, почему бы не установить все окна на один WMClass?
Мы можем сделать что-то вроде этого (очевидно, заменим Window 1, Window 2 и potatoes с вашими именами окон и желаемым WMClass):
xprop -name "Window 1" -f WM_CLASS 8s -set WM_CLASS "potatoes"
xprop -name "Window 2" -f WM_CLASS 8s -set WM_CLASS "potatoes"
И в файле .desktop мы можем сделать это: StartupWMClass=potatoes
Tadam! Теперь все окна сгруппированы. Но эй, мы делаем это вручную каждый раз, когда программа открывается? Конечно, нет.
Мы можем просто пойти и сделать сценарий bash, который автоматически выполняет это каждые полсекунды:
while true
do
xprop -name "Window 1" -f WM_CLASS 8s -set WM_CLASS "potatoes"
xprop -name "Window 2" -f WM_CLASS 8s -set WM_CLASS "potatoes"
sleep 0.5
done
И, наконец, установите .sh, которые мы создали, чтобы запускать каждый время запуска ОС:
Надеюсь, что мой ответ будет полезен любому, кто просматривает этот вопрос.
Как удалить VLC из меню звука / Как предотвратить повторное появление VLC в звуковом меню.
Как удалить VLC из меню звука / Как предотвратить повторное появление VLC в звуковое меню.
GUI method
Установить dconf editor Открыть dconf-editor и перейти к: com/canonical/indicator/soundУстановить dconf editor
Готово, VLC исчез из меню.
GUI method
Done, VLC исчез из меню. Открыть dconf -editor и перейдите к: com/canonical/indicator/soundПредотвращение возврата VLC в звуковое меню (14.04)
Решение удаляет VLC из звукового меню, но если вы запускаете VLC, он снова появится в меню звука. Сценарий ниже не предотвращает это, но сразу и автоматически удаляет его, как только VLC закрыт.
Чтобы использовать его:
Скопируйте сценарий ниже, вставьте его в пустой текстовый файл и сохраните он как vlc, делает его исполняемым. Затем скопируйте файл vlc.desktop с /usr/share/applications на ~/.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)
Предотвращение VLC от возврат в звуковое меню (14.04)
Этот метод / сценарий также можно использовать для других приложений в меню звука. Две строки в последнем разделе скрипта должны быть изменены тогда, согласно другому приложению:
if item == "vlc.desktop": (change to desktop file of the application)
и
subprocess.call(["/usr/bin/vlc"]) (change the command to run the application)
Показывать пользовательские приложения в звуковом меню только в том случае, если они запускают
. Решение ниже гибко применимо для нескольких приложений одновременно с позицией в меню звука. Пользователь может определить (и изменить), какие приложения имеют постоянную позицию в меню, и какие из них следует удалить из звукового меню после их закрытия.
Show пользовательские приложения в звуковом меню, только если они запускают
Существует решение сценария, запускаемого с момента запуска (login). Это позволяет пользовательским приложениям появляться в звуковом меню, но удаляет эти приложения из звукового меню после их закрытия.
Скрипт не влияет на функциональность файлов рабочего стола.
как использовать
Скопировать сценарий ниже в пустой файл, сохранить его как cleanup_soundmenu.py. В line, начиная с no_show =, устанавливаются приложения, которые следует очищать из меню после их закрытия. Предусмотрены два примера: ['rhythmbox', 'vlc']. Эти имена вынырнули из своих файлов на рабочем столе, разделившись с .desktop. В строке, начиная с cleanup_interval, пользователь может определить интервал между проверками очистки. По умолчанию это 10 секунд. Добавьте следующую строку в Startup Applications (Dash> Startup Applications> Add):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)
Откройте приложение Terminal, затем скопируйте, вставьте и выполните одну из следующих команд. После этого после того, как 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)
оставить запись Rhythmbox в звуковом индикаторе: (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 set com.canonical.indicator.sound interested-media-players \\\"['\'rhythmbox.desktop\'']\\\""/' ~/.local/share/applications/vlc.desktop)
отменять изменения: [ f3] В этой статье о том, как добавить эту функцию, выполните противоположный сценарий:
Инструменты -> Настройки -> все -> Интерфейс -> Интерфейс управления -> Интерфейс управления D-Bus