Хотелось получать уведомление при смены рабочего стола в XFCE4, но нет никаких штатных средств, только какие то костыли, в виде
этого, там в while true; каждую секунду запускается wmctl который проверяет не изменился ли текущий рабочий стол. Меня такое не устраивало и отправился за помощью к
ChatGPT и там я смог найти ответ и вполне вменяемый скрипт.
Вот такой запрос я написал в ChatGPT
linux how get event in x windows when current workspace was changed
И спустя пару итераций и исправление ошибок получил вот такой вот скрипт —
https://gist.github.com/clsv/88d96725d7c4159ec7a43117c71e3597
#!/bin/env python3
from Xlib import X, display
import subprocess
# Open the display
d = display.Display()
# Get the root window
root = d.screen().root
# Select for SubstructureNotifyMask and PropertyChangeMask events
root.change_attributes(event_mask=X.SubstructureNotifyMask | X.PropertyChangeMask)
# Flush the display
d.flush()
# Id for notification
notify_id = "0"
# Get the names of all workspaces
workspaces = subprocess.check_output(['wmctrl', '-d']).decode().splitlines()
# Map the workspace numbers to their names
workspace_names = {i: name.split()[9] for i, name in enumerate(workspaces)}
# Get the initial workspace number
prev_workspace = root.get_full_property(d.intern_atom('_NET_CURRENT_DESKTOP'), X.AnyPropertyType).value[0]
# Enter the event loop
while True:
event = d.next_event()
if event.type == X.PropertyNotify and event.atom == d.intern_atom('_NET_CURRENT_DESKTOP'):
# Handle workspace change event
# Get the current workspace number
curr_workspace = root.get_full_property(d.intern_atom('_NET_CURRENT_DESKTOP'), X.AnyPropertyType).value[0]
# Check if the workspace has changed
if curr_workspace != prev_workspace:
# Handle the workspace change event
workspace_name = workspace_names.get(curr_workspace, f"Workspace {curr_workspace}")
notify_id = subprocess.check_output(['notify-send', "-i", "workspace-switcher-right-bottom", "-t", "3000", "-p", "-r", f"{notify_id}", "Workspace", f"{curr_workspace} - {workspace_name}"]).decode().splitlines()[0]
# Update the previous workspace number
prev_workspace = curr_workspace
Устанавливаем python-xlib
apt install python3-xlib
OR
pip install python-xlib
Добавляем скрипт в автозапуск и получаем уведомления о смене рабочего стола в linux :-)
В скрипте мы подписываемся на
root.change_attributes(event_mask=X.SubstructureNotifyMask | X.PropertyChangeMask)
, а потом среди event ищем необходимые
Спасибо ChatGPT :-)
Комментарии ()