在全屏应用程序中关闭SUPER键

有没有办法在游戏会话或全屏应用程序中关闭SUPER键?

介绍

如果任何X11窗口处于全屏模式,则以下脚本将禁用超级密钥。 它应该作为启动应用程序添加,但也可以在独立模式下运行。

用法

要手动运行脚本,只需执行以下操作:

python disable_super_key.py 

为了在登录时自动启动脚本,请参阅如何在登录时自动启动应用程序?

获取脚本源代码

可以从此答案中复制脚本源,或通过克隆我的GitHub存储库来获取它。

git人的说明:

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

该脚本将位于/opt/sergrep/disable_super_key.py

脚本源代码

 #!/usr/bin/env python # ########################################################### # Author: Serg Kolo , contact: 1047481448@qq.com # 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() 

调试

如果需要debug = True ,请将第32行从debug = False更改为debug = True并从命令行运行脚本