Desactiva la tecla SUPER durante las aplicaciones de pantalla completa

8

¿Hay alguna manera de desactivar la tecla SUPER durante las sesiones de juego o las aplicaciones de pantalla completa en general?

Kay T
fuente
Sí, es posible. Comenzaré a escribir un guión para eso en breve y lo publicaré una vez que lo tenga funcionando
Sergiy Kolodyazhnyy
¡que sería increíble!
Kay T
1
Respuesta publicada, hágame saber lo que piensa
Sergiy Kolodyazhnyy
2
Nota para los futuros visitantes He escrito previamente un script relacionado, para deshabilitar Superkey por ventana específica. Por favor, compruébalo si estás interesado: askubuntu.com/q/754884/295286
Sergiy Kolodyazhnyy

Respuestas:

11

Introducción

El siguiente script deshabilita la Supertecla si alguna ventana X11 está en modo de pantalla completa. Está destinado a agregarse como una aplicación de inicio, pero también puede ejecutarse en modo independiente.

Uso

Para ejecutar el script manualmente, es suficiente hacer:

python disable_super_key.py

Para que el script se inicie automáticamente al iniciar sesión, consulte ¿Cómo inicio las aplicaciones automáticamente al iniciar sesión?

Obteniendo el código fuente del script

Se podría copiar la fuente del script de esta respuesta, u obtenerla clonando mi repositorio GitHub .

Instrucciones para quienes tienen git:

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

El guión se ubicará en /opt/sergrep/disable_super_key.py

Código fuente del 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()

Depuración

En caso de que la depuración es la línea es necesario, el cambio de 32 debug = Falsea debug = Truey ejecutar el script desde la línea de comandos

Sergiy Kolodyazhnyy
fuente
Me han pedido que haga que este script funcione por espacio de trabajo específico. Para aquellos interesados, puede encontrar la solución aquí askubuntu.com/a/816512/295286. OBSERVE también que este script se ha actualizado para manejar la terminación del script para volver a habilitar la clave SUPER una vez que el script finaliza
Sergiy Kolodyazhnyy