Xfce с Kde Plasma 5: как автоматически передавать фокус вновь созданным окнам?

Xfce с Kde Plasma 5: как автоматически передавать фокус вновь созданным окнам?

Я использую Xfce с Kde Plamsa5 в качестве оконного менеджера. Я больше не могу открыть настройки окна Xfce, а только системные настройки KDE. Я не могу найти опцию автоматического фокусирования на вновь созданных окнах.

Когда я открываю новое окно, фокус остается на предыдущем окне, но я хочу, чтобы новое окно автоматически открывалось и фокусировалось.

решение1

Это "предотвращение кражи фокуса" в настройках окна Kwin. Если установлено значение "средний", то вновь открываемые окна автоматически получают фокус.

решение2

Чистое решение

Я не использую плазму, поэтому не могу разобраться, что является причиной проблемы. Нет нужды объяснять, что устранение причины было бы «самым чистым» решением.

Если это кажется невозможным, и вы хотите использовать эту комбинацию, вы можете использовать повязку ниже, чтобы заставить ее работать. Решение — чрезвычайно «легкий» фоновый скрипт, следящий за вновь созданными окнами, поднимающий их, если они появляются.

Как использовать

  1. Скрипт используетwmctrl

    sudo apt-get install wmctrl
    
  2. Скопируйте скрипт ниже в пустой файл, сохраните его какraise_window.py

  3. Проверьте запуск из терминала командой:

    python3 /path/to/raise_window.py
    

    Откройте несколько приложений и посмотрите, открываются ли их окна автоматически.

  4. Если все работает нормально, добавьте его в автозагрузку приложений: Dash > Автозагрузка приложений > Добавить команду.

Сценарий

#!/usr/bin/env python3
import subprocess
import time
import os

get = lambda cmd: subprocess.check_output(cmd).decode("utf-8").strip()
curr_1 = get(["wmctrl", "-l"]).splitlines()

while True:
    try:
        curr_2 = get(["wmctrl", "-l"]).splitlines()
        new = [w for w in curr_2 if not w in curr_1]
        for w in new:
            w = w.split()[0]
            command = "wmctrl -ia "+w
            subprocess.Popen(["/bin/bash", "-c", command])
    except:
        pass
    curr_1 = curr_2
    time.sleep(1)

Связанный контент