Уведомления на рабочем столе, отправленные i3blocks, не отображаются, если какое-либо окно находится в полноэкранном режиме.

И четвертый :Д

awk '1 {if (a[$1]) {a[$1] = a[$1]$2"|"} else {a[$1] = $2"|"}} END {for (i in a) { print i,gensub( /\|$/,"","1",a[i])}}' kumarjit
FileA, CREATE|MODIFY|DELETE
FileB, CREATE|MODIFY
0
11.06.2020, 17:16
1 ответ

Я нашел решение, основанное наi3протоколе IPC . Это позволяет пользователю взаимодействовать с i3из внешнего мира. Например, пользователь может подписаться на событие i3(«окно изменило свой полноэкранный режим» в нашем случае )и подключить обратный вызов к этому событию (и отправить SIGCONTнаi3blocks).

Существует несколько библиотек, написанных для разных PL (, см. 5-й раздел документации i3 IPC ), которые предоставляют пользовательский интерфейс для этого протокола. Я выбралPythonодин . Вот код:

#!/usr/bin/env python3

import subprocess, os, signal
from i3ipc import Event, Connection

def on_fullscreen( i3, e ) :
    """
    A callback which is called every time a window
    changes its fullscreen mode
    """
    try :
        process = subprocess.Popen( ['pgrep', 'i3blocks'],
                                    stdout=subprocess.PIPE,
                                    stderr=subprocess.PIPE,
                                    universal_newlines=True )
        pid = int( process.stdout.readline().split()[0] )
        os.kill( pid, signal.SIGCONT ) 
    except :
        i3.main_quit()

i3 = Connection()

i3.on( Event.WINDOW_FULLSCREEN_MODE, on_fullscreen )

i3.main()

Я поместил этот код в скрипт Python с именем i3blocks_awake.py. Теперь все, что нам нужно сделать, это выполнять этот скрипт каждый раз при запуске i3. Итак, из документацииi3мы знаем, что exec_always— это то, что нам нужно. Поэтому я поместил следующую строку в свой i3конфигурационный файл (в самый конец):

exec_always --no-startup-id '/home/lrdprdx/.config/i3/i3block_awake.py'

Перезапускаю i3и вуаля, все мои уведомления работают как положено.


Я думаю, что это не 100% безопасное и умное решение, но оно работает. Например, каждый раз, когда i3перезапускается, соединение с сокетом теряется, поэтому скрипт тоже перезапускается. Если вы видите какие-то недостатки здесь, пожалуйста, скажите.

0
28.04.2021, 23:13

Теги

Похожие вопросы