Tắt khóa SUPER trong các ứng dụng toàn màn hình


8

Có cách nào để tắt phím SUPER trong các phiên chơi trò chơi hoặc ứng dụng toàn màn hình nói chung không?


Vâng, nó là có thể. Tôi sẽ bắt đầu viết một kịch bản cho điều đó trong thời gian ngắn và sẽ đăng khi tôi làm việc
Sergiy Kolodyazhnyy

điêu đo thật tuyệt vơi!
Kay T

1
Trả lời được đăng, cho tôi biết những gì bạn nghĩ
Sergiy Kolodyazhnyy

2
Lưu ý đối với khách truy cập trong tương lai trước đây tôi đã viết một tập lệnh liên quan để vô hiệu hóa Super key trên mỗi cửa sổ cụ thể. Vui lòng kiểm tra xem nếu bạn quan tâm: Askubfox.com/q/754884/295286
Sergiy Kolodyazhnyy

Câu trả lời:


11

Giới thiệu

Tập lệnh sau sẽ vô hiệu hóa Superkhóa nếu bất kỳ cửa sổ X11 nào ở chế độ toàn màn hình. Nó có nghĩa là được thêm vào như một ứng dụng khởi động, nhưng cũng có thể chạy ở chế độ độc lập.

Sử dụng

Để chạy tập lệnh theo cách thủ công, việc này là đủ:

python disable_super_key.py

Để làm cho đoạn mã tự động bắt đầu khi đăng nhập, hãy tham khảo Làm thế nào để tôi tự động khởi động ứng dụng khi đăng nhập?

Lấy mã nguồn tập lệnh

Người ta có thể sao chép nguồn tập lệnh từ câu trả lời này hoặc có được nó thông qua nhân bản kho lưu trữ GitHub của tôi .

Hướng dẫn cho những người có git:

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

Kịch bản sẽ được đặt ở /opt/sergrep/disable_super_key.py

Mã nguồn script

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

Gỡ lỗi

Trong trường hợp cần gỡ lỗi, thay đổi dòng 32 từ debug = Falsesang debug = Truevà chạy tập lệnh từ dòng lệnh


Tôi đã được yêu cầu làm cho kịch bản này hoạt động trên mỗi không gian làm việc cụ thể. Đối với những người quan tâm, bạn có thể tìm giải pháp tại đây Askubfox.com/a/816512/295286 LƯU Ý rằng tập lệnh này đã được cập nhật để xử lý việc chấm dứt tập lệnh để bật lại khóa SUPER khi tập lệnh thoát ra
Sergiy Kolodyazhnyy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.