Уведомление о смены workspace в X11 Linux

Хотелось получать уведомление при смены рабочего стола в 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 :-)

Комментарии ()

    Авторизация

    GitHubGoogleVkontakteYandex
    Есть вопрос или предложение пиши в Telegram @cloudsv

    MTProto прokси для Telegram

    Прямой эфир

    cloudsv 26 октября 2024, 11:31
    MySQL Workbench падает при подключении 4
    Diego mont 25 мая 2023, 07:04
    Полезные боты в Telegram 2
    cloudsv 24 апреля 2023, 17:56
    Обновление Scala Rider G4 52
    cloudsv 12 ноября 2022, 19:16
    Установка и настройка minidlna 3
    cloudsv 03 ноября 2022, 03:42
    Настройка прокси mtproto для Telegram 52
    cloudsv 03 января 2022, 10:50
    Let's Encrypt это легко и просто 4
    cloudsv 05 августа 2020, 11:57
    Мне вчера стукнуло 34 4
    cloudsv 07 августа 2023, 22:56
    Linux Asus ROG x13 flow 2022 GV301RE и Linux 0
    cloudsv 15 апреля 2023, 16:23
    Linux Уведомление о смены workspace в X11 Linux 0
    cloudsv 17 октября 2020, 09:55
    Linux Отключить DHCP IPv6 в systemd 0
    cloudsv 30 июля 2020, 21:54
    О жизни Мне вчера стукнуло 34 4
    cloudsv 15 апреля 2020, 15:45
    Linux Основные hotkeys редактора Vim 0
    cloudsv 01 октября 2019, 08:00
    Linux Локальный редирект порта в Linux 0
    cloudsv 25 августа 2019, 16:14
    О жизни Социальная сеть от Яндекса Aura 0
    cloudsv 30 июля 2019, 21:34
    О жизни 33 year old 0
    cloudsv 25 июня 2019, 18:29
    Telegram Полезные боты в Telegram 2