Schalten Sie die SUPER-Taste während Vollbild-Apps aus

8

Gibt es eine Möglichkeit, die SUPER-Taste während Spielesitzungen oder Vollbild-Apps im Allgemeinen auszuschalten?

Kay T.
quelle
Ja, es ist möglich. Ich werde in Kürze damit beginnen, ein Skript dafür zu schreiben und es veröffentlichen, sobald es funktioniert
Sergiy Kolodyazhnyy
das wäre super!
Kay T
1
Antwort gepostet, lassen Sie mich wissen, was Sie denken
Sergiy Kolodyazhnyy
2
Hinweis für zukünftige Besucher Ich habe zuvor ein verwandtes Skript geschrieben, um den Superschlüssel pro Fenster zu deaktivieren. Bitte überprüfen Sie es, wenn Sie interessiert sind: askubuntu.com/q/754884/295286
Sergiy Kolodyazhnyy

Antworten:

11

Einführung

Das folgende Skript deaktiviert den SuperSchlüssel, wenn sich ein X11-Fenster im Vollbildmodus befindet. Es soll als Startanwendung hinzugefügt werden, kann aber auch in einem eigenständigen Modus ausgeführt werden.

Verwendungszweck

Um das Skript manuell auszuführen, ist Folgendes ausreichend:

python disable_super_key.py

Informationen zum automatischen Starten des Scrips beim Anmelden finden Sie unter Wie starte ich Anwendungen beim Anmelden automatisch?

Abrufen des Skriptquellcodes

Man könnte die Skriptquelle aus dieser Antwort kopieren oder sie durch Klonen meines GitHub- Repositorys erhalten.

Anleitung für diejenigen, die haben git:

  1. cd /opt
  2. sudo git clone https://github.com/SergKolo/sergrep.git
  3. chmod -R +x sergrep

Das Skript befindet sich in /opt/sergrep/disable_super_key.py

Skript-Quellcode

#!/usr/bin/env python
#
###########################################################
# Author: Serg Kolo , contact: [email protected] 
# Date: August 1st , 2016
# Purpose: Disable Super key that calls Unity Dash, when any 
#          X11 window is in fullscreen state
# 
# Written for: https://askubuntu.com/q/805807/295286
# Tested on: Ubuntu 16.04 LTS 
###########################################################
# Copyright: Serg Kolo , 2016
#    
#     Permission to use, copy, modify, and distribute this software is hereby granted
#     without fee, provided that  the copyright notice above and this permission statement
#     appear in all copies.
#
#     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
#     THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
#     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
#     DEALINGS IN THE SOFTWARE.
from __future__ import print_function
import gi
gi.require_version('Gdk', '3.0')
from gi.repository import  Gdk,Gio
import subprocess
import signal
import time
import sys

debug = False

def gsettings_get(schema,path,key):
    """ fetches value of gsettings schema"""
    if path is None:
        gsettings = Gio.Settings.new(schema)
    else:
        gsettings = Gio.Settings.new_with_path(schema,path)
    return gsettings.get_value(key)

def gsettings_set(schema,path,key,value):
    """ sets value of gsettings schema """
    if path is None:
        gsettings = Gio.Settings.new(schema)
    else:
        gsettings = Gio.Settings.new_with_path(schema,path)
    return gsettings.set_string(key,value)


def gsettings_reset(schema,path,key):
    """ resets schema:key value to default"""
    if path is None:
        gsettings = Gio.Settings.new(schema)
    else:
        gsettings = Gio.Settings.new_with_path(schema,path)
    return gsettings.reset(key)

def run_cmd(cmdlist):
    """ reusable function for running shell commands"""
    try:
        stdout = subprocess.check_output(cmdlist)
    except subprocess.CalledProcessError:
        pass
    else:
        if stdout:
            return stdout


def main():
    """ defines entry point of the program """
    screen = Gdk.Screen.get_default()
    while True:

        key_state = str(gsettings_get('org.compiz.unityshell', 
                                  '/org/compiz/profiles/unity/plugins/unityshell/', 
                                  'show-launcher'))
        active_xid = str(screen.get_active_window().get_xid())
        wm_state =  run_cmd( ['xprop', '-root', '-notype','-id',active_xid, '_NET_WM_STATE'])  

        if debug : print(key_state,wm_state)

        if 'FULLSCREEN' in wm_state:
            if "Super" in  key_state:    
                gsettings_set('org.compiz.unityshell', 
                              '/org/compiz/profiles/unity/plugins/unityshell/',
                              'show-launcher', 
                              'Disabled')

        else:
            if "Disabled" in key_state :
               gsettings_reset( 'org.compiz.unityshell', 
                                '/org/compiz/profiles/unity/plugins/unityshell/',
                                'show-launcher')


        time.sleep(0.25)


def sigterm_handler(*args):
    """ ensures that Super key has been reset upon exit"""
    gsettings_reset( 'org.compiz.unityshell', 
                     '/org/compiz/profiles/unity/plugins/unityshell/',
                     'show-launcher')

    if debug: print('CAUGHT SIGTERM')
    sys.exit(0)


if __name__ == "__main__":
    signal.signal(signal.SIGTERM,sigterm_handler)
    main()

Debuggen

Wenn ein Debugging erforderlich ist, ändern Sie Zeile 32 von debug = Falsein debug = Trueund führen Sie das Skript über die Befehlszeile aus

Sergiy Kolodyazhnyy
quelle
Ich wurde gebeten, dieses Skript für einen bestimmten Arbeitsbereich zum Laufen zu bringen. Für Interessenten finden Sie die Lösung hier askubuntu.com/a/816512/295286. Beachten Sie auch, dass dieses Skript aktualisiert wurde, um die Beendigung des Skripts zu handhaben und den SUPER-Schlüssel nach dem Beenden des Skripts wieder zu aktivieren
Sergiy Kolodyazhnyy