Désactivez la touche SUPER pendant les applications en plein écran

8

Existe-t-il un moyen de désactiver la touche SUPER pendant les sessions de jeu ou les applications plein écran en général?

Kay T
la source
Oui c'est possible. Je vais commencer à écrire un script pour cela sous peu et je publierai une fois que je l'
aurai
ce serait génial!
Kay T
1
Réponse publiée, faites-moi savoir ce que vous pensez
Sergiy Kolodyazhnyy
2
Note aux futurs visiteurs J'ai déjà écrit un script connexe, pour désactiver la touche Super par fenêtre spécifique. Veuillez le vérifier si vous êtes intéressé: askubuntu.com/q/754884/295286
Sergiy Kolodyazhnyy

Réponses:

11

introduction

Le script suivant désactive la Superclé si une fenêtre X11 est en mode plein écran. Il est destiné à être ajouté en tant qu'application de démarrage, mais peut également s'exécuter en mode autonome.

Usage

Pour exécuter le script manuellement, il suffit de faire:

python disable_super_key.py

Pour que le script démarre automatiquement lors de la connexion, consultez Comment démarrer automatiquement les applications lors de la connexion?

Obtention du code source du script

On pourrait copier la source du script à partir de cette réponse, ou l'obtenir via le clonage de mon référentiel GitHub .

Instructions pour ceux qui ont git:

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

Le script sera situé dans /opt/sergrep/disable_super_key.py

Code source du script

#!/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()

Débogage

Si le débogage est nécessaire, changez la ligne 32 de debug = Falseen debug = Trueet exécutez le script à partir de la ligne de commande

Sergiy Kolodyazhnyy
la source
On m'a demandé de faire fonctionner ce script par espace de travail spécifique. Pour ceux qui sont intéressés, vous pouvez trouver la solution ici askubuntu.com/a/816512/295286 REMARQUE également que ce script a été mis à jour pour gérer la terminaison du script afin de réactiver la touche SUPER une fois le script
terminé