Я знаю о Всегда на видимой рабочей области. Но я хочу, чтобы все окна имели это по умолчанию при открытии с несколькими исключениями.
Рабочий процесс, который я ищу, в значительной степени является обратным оно работает. Показать все на всех рабочих пространствах с несколькими (ручными) исключениями.
Возможно ли это? Если это требует некоторых сценариев, я, вероятно, не буду возражать.
Я запускаю Ubuntu 17.04 с корицей, но эта функция присутствует в единстве и большинстве настольных приложений.
Интересный случай.
. Концепция не сложна: просто установите все липкие окна:
вы хотите исключить некоторые приложения, нам нужно будет перечислить эти приложения и проверить окна для их класса окон, чтобы решить, следует ли устанавливать их липкими (отображаться на всех рабочих пространствах) или нет. Список окон, как вывод из wmctrl -l, также показывает несколько типов окон, таких как DOCK и DESKTOP, из которых вы не должны редактировать свои свойства в целом. Нам нужно будет убедиться, что только новые листы липкие, чтобы избежать ненужного расхода топлива.В следующем скрипте:
Поскольку вы хотите исключить некоторые приложения, нам нужно будет указать эти приложения и проверить окна для их оконного класса, решить, следует ли устанавливать их липкими (отображаться на всех рабочих пространствах) или нет. Затем сценарий запускаетсяxprop -id <window_id>
. В котором мы можем найти информацию о _NET_WM_WINDOW_TYPE и WM_CLASS В списке окон, как вывод wmctrl -l, также показаны несколько типов окон, таких как DOCK и DESKTOP, из которых вы не должны редактировать свои свойства в целом. ] Поскольку скрипт действует только на вновь созданные окна, он не добавит никакой заметной нагрузки на вашу систему.
#!/usr/bin/env python3
import subprocess
import time
# excluded applications
apps = ["gedit", "chromium", "monkey"]
# ignored window types
ignore = [
"= _NET_WM_WINDOW_TYPE_DOCK",
"= _NET_WM_WINDOW_TYPE_DESKTOP",
]
# just a helper
def get(cmd):
try:
return subprocess.check_output(cmd).decode("utf-8").strip()
except (subprocess.CalledProcessError, TypeError):
pass
# initiate windowlist
wins1 = []
while True:
# cycle time
time.sleep(2)
# initiate new list
new_wins = []
# get the most recent window list
windata = get(["wmctrl", "-l"])
if windata:
# extract window -ids
wins2 = [w.split()[0] for w in windata.splitlines()]
new = [w for w in wins2 if w not in wins1]
# check for excluded classes and window types
for w in new:
testdata = get(["xprop", "-id", w])
if all([
not any([ig in testdata for ig in ignore]),
not any([app in testdata for app in apps]),
]):
# set the passed windows to sticky
subprocess.Popen(
["wmctrl", "-i", "-r", w, "-b", "add,sticky"]
)
# refresh the window list for next cycle
wins1 = wins2
sudo apt install wmctrl
Скопируйте сценарий в пустой файл, сохраните его как set_sticky.py. В разделе главы вашего скрипта установите исключение WM_CLASS -ses (вы можете удалить обезьяна, это было для целей тестирования :)) Протестируйте ее с помощью команды: python3 /path/to/set_sticky.py
Если все работает нормально, y ou может добавить его в приложения для запуска, но не забудьте добавить небольшой прорыв, чтобы предотвратить взлом скрипта на еще не подготовленном рабочем столе: /bin/bash -c "sleep 10 && python3 /path/to/set_sticky.py"
Удачи:)
Я тестировал его на Ubuntu Budgie (mutter) в течение 25 минут без проблем. Он должен работать нормально в любом оконном менеджере, но если вы столкнулись с проблемой, просто укажите.
Интересный случай.
. Концепция не сложна: просто установите все липкие окна:
вы хотите исключить некоторые приложения, нам нужно будет перечислить эти приложения и проверить окна для их класса окон, чтобы решить, следует ли устанавливать их липкими (отображаться на всех рабочих пространствах) или нет. Список окон, как вывод из wmctrl -l, также показывает несколько типов окон, таких как DOCK и DESKTOP, из которых вы не должны редактировать свои свойства в целом. Нам нужно будет убедиться, что только новые листы липкие, чтобы избежать ненужного расхода топлива.В следующем скрипте:
Поскольку вы хотите исключить некоторые приложения, нам нужно будет указать эти приложения и проверить окна для их оконного класса, решить, следует ли устанавливать их липкими (отображаться на всех рабочих пространствах) или нет. Затем сценарий запускаетсяxprop -id <window_id>
. В котором мы можем найти информацию о _NET_WM_WINDOW_TYPE и WM_CLASS В списке окон, как вывод wmctrl -l, также показаны несколько типов окон, таких как DOCK и DESKTOP, из которых вы не должны редактировать свои свойства в целом. ] Поскольку скрипт действует только на вновь созданные окна, он не добавит никакой заметной нагрузки на вашу систему.
#!/usr/bin/env python3
import subprocess
import time
# excluded applications
apps = ["gedit", "chromium", "monkey"]
# ignored window types
ignore = [
"= _NET_WM_WINDOW_TYPE_DOCK",
"= _NET_WM_WINDOW_TYPE_DESKTOP",
]
# just a helper
def get(cmd):
try:
return subprocess.check_output(cmd).decode("utf-8").strip()
except (subprocess.CalledProcessError, TypeError):
pass
# initiate windowlist
wins1 = []
while True:
# cycle time
time.sleep(2)
# initiate new list
new_wins = []
# get the most recent window list
windata = get(["wmctrl", "-l"])
if windata:
# extract window -ids
wins2 = [w.split()[0] for w in windata.splitlines()]
new = [w for w in wins2 if w not in wins1]
# check for excluded classes and window types
for w in new:
testdata = get(["xprop", "-id", w])
if all([
not any([ig in testdata for ig in ignore]),
not any([app in testdata for app in apps]),
]):
# set the passed windows to sticky
subprocess.Popen(
["wmctrl", "-i", "-r", w, "-b", "add,sticky"]
)
# refresh the window list for next cycle
wins1 = wins2
sudo apt install wmctrl
Скопируйте сценарий в пустой файл, сохраните его как set_sticky.py. В разделе главы вашего скрипта установите исключение WM_CLASS -ses (вы можете удалить обезьяна, это было для целей тестирования :)) Протестируйте ее с помощью команды: python3 /path/to/set_sticky.py
Если все работает нормально, y ou может добавить его в приложения для запуска, но не забудьте добавить небольшой прорыв, чтобы предотвратить взлом скрипта на еще не подготовленном рабочем столе: /bin/bash -c "sleep 10 && python3 /path/to/set_sticky.py"
Удачи:)
Я тестировал его на Ubuntu Budgie (mutter) в течение 25 минут без проблем. Он должен работать нормально в любом оконном менеджере, но если вы столкнулись с проблемой, просто укажите.
Интересный случай.
. Концепция не сложна: просто установите все липкие окна:
вы хотите исключить некоторые приложения, нам нужно будет перечислить эти приложения и проверить окна для их класса окон, чтобы решить, следует ли устанавливать их липкими (отображаться на всех рабочих пространствах) или нет. Список окон, как вывод из wmctrl -l, также показывает несколько типов окон, таких как DOCK и DESKTOP, из которых вы не должны редактировать свои свойства в целом. Нам нужно будет убедиться, что только новые листы липкие, чтобы избежать ненужного расхода топлива.В следующем скрипте:
Поскольку вы хотите исключить некоторые приложения, нам нужно будет указать эти приложения и проверить окна для их оконного класса, решить, следует ли устанавливать их липкими (отображаться на всех рабочих пространствах) или нет. Затем сценарий запускаетсяxprop -id <window_id>
. В котором мы можем найти информацию о _NET_WM_WINDOW_TYPE и WM_CLASS В списке окон, как вывод wmctrl -l, также показаны несколько типов окон, таких как DOCK и DESKTOP, из которых вы не должны редактировать свои свойства в целом. ] Поскольку скрипт действует только на вновь созданные окна, он не добавит никакой заметной нагрузки на вашу систему.
#!/usr/bin/env python3
import subprocess
import time
# excluded applications
apps = ["gedit", "chromium", "monkey"]
# ignored window types
ignore = [
"= _NET_WM_WINDOW_TYPE_DOCK",
"= _NET_WM_WINDOW_TYPE_DESKTOP",
]
# just a helper
def get(cmd):
try:
return subprocess.check_output(cmd).decode("utf-8").strip()
except (subprocess.CalledProcessError, TypeError):
pass
# initiate windowlist
wins1 = []
while True:
# cycle time
time.sleep(2)
# initiate new list
new_wins = []
# get the most recent window list
windata = get(["wmctrl", "-l"])
if windata:
# extract window -ids
wins2 = [w.split()[0] for w in windata.splitlines()]
new = [w for w in wins2 if w not in wins1]
# check for excluded classes and window types
for w in new:
testdata = get(["xprop", "-id", w])
if all([
not any([ig in testdata for ig in ignore]),
not any([app in testdata for app in apps]),
]):
# set the passed windows to sticky
subprocess.Popen(
["wmctrl", "-i", "-r", w, "-b", "add,sticky"]
)
# refresh the window list for next cycle
wins1 = wins2
sudo apt install wmctrl
Скопируйте сценарий в пустой файл, сохраните его как set_sticky.py. В разделе главы вашего скрипта установите исключение WM_CLASS -ses (вы можете удалить обезьяна, это было для целей тестирования :)) Протестируйте ее с помощью команды: python3 /path/to/set_sticky.py
Если все работает нормально, y ou может добавить его в приложения для запуска, но не забудьте добавить небольшой прорыв, чтобы предотвратить взлом скрипта на еще не подготовленном рабочем столе: /bin/bash -c "sleep 10 && python3 /path/to/set_sticky.py"
Удачи:)
Я тестировал его на Ubuntu Budgie (mutter) в течение 25 минут без проблем. Он должен работать нормально в любом оконном менеджере, но если вы столкнулись с проблемой, просто укажите.