ปิดปุ่ม SUPER ระหว่างแอปแบบเต็มหน้าจอ


8

มีวิธีปิดคีย์ SUPER ในระหว่างรอบการเล่นเกมหรือแอปแบบเต็มหน้าจอโดยทั่วไปหรือไม่


ใช่มันเป็นไปได้ ฉันจะเริ่มเขียนสคริปต์สำหรับสิ่งนั้นในไม่ช้าและจะโพสต์เมื่อฉันทำงาน
Sergiy Kolodyazhnyy

นั่นจะยอดเยี่ยม!
Kay T

1
คำตอบโพสต์แจ้งให้เราทราบว่าคุณคิดอย่างไร
Sergiy Kolodyazhnyy

2
หมายเหตุถึงผู้เยี่ยมชมในอนาคตฉันได้เขียนสคริปต์ที่เกี่ยวข้องก่อนหน้านี้เพื่อปิดใช้งาน Super key ต่อหน้าต่างที่ระบุ โปรดตรวจสอบว่าคุณสนใจ: askubuntu.com/q/754884/295286
Sergiy Kolodyazhnyy

คำตอบ:


11

บทนำ

สคริปต์ต่อไปนี้ปิดใช้งานSuperคีย์หากหน้าต่าง X11 ใด ๆ อยู่ในโหมดเต็มหน้าจอ มันหมายถึงการเพิ่มเป็นแอปพลิเคชันเริ่มต้น แต่ยังสามารถทำงานในโหมดสแตนด์อะโลน

การใช้

หากต้องการเรียกใช้สคริปต์ด้วยตนเองคุณต้องทำดังนี้:

python disable_super_key.py

ในการทำให้ scrip เริ่มต้นโดยอัตโนมัติเมื่อเข้าสู่ระบบปรึกษาฉันจะเริ่มแอปพลิเคชันโดยอัตโนมัติเมื่อเข้าสู่ระบบได้อย่างไร

การรับซอร์สโค้ดสคริปต์

หนึ่งสามารถคัดลอกแหล่งสคริปต์จากคำตอบนี้หรือรับผ่านโคลนที่เก็บ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()

แก้จุดบกพร่อง

ในกรณีที่จำเป็นต้องทำการดีบักให้เปลี่ยนบรรทัด 32 จากdebug = Falseเป็นdebug = Trueและเรียกใช้สคริปต์จากบรรทัดคำสั่ง


ฉันถูกขอให้ทำให้สคริปต์นี้ทำงานต่อพื้นที่ทำงานเฉพาะ สำหรับผู้ที่สนใจคุณสามารถหาวิธีแก้ไขได้ที่นี่askubuntu.com/a/816512/295286หมายเหตุด้วยว่าสคริปต์นี้ได้รับการอัปเดตเพื่อจัดการการยกเลิกสคริปต์เพื่อเปิดใช้งานคีย์ SUPER อีกครั้งเมื่อสคริปต์ออก
Sergiy Kolodyazhnyy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.