ฉันสามารถตั้งค่ามุมร้อนให้เรียกใช้คำสั่งที่กำหนดเองใน Unity ได้หรือไม่


13

ฉันชอบ Hot Corners จริงๆ :-)

เป็นไปได้ไหมที่จะเรียกใช้คำสั่งที่กำหนดเองบนมุมที่ร้อนแรงดังแสดงด้านล่าง?

ป้อนคำอธิบายรูปภาพที่นี่


ฉันไม่คิดว่ามันเป็นไปได้สำหรับ hotcorners โดยเฉพาะ (อย่างน้อยก็ไม่ใช่ด้วยวิธีที่ Unity ใช้พวกมัน) แต่มันเป็นไปได้ที่จะทริกเกอร์สคริปต์เมื่อวางเมาส์ไว้ในพื้นที่เฉพาะของหน้าจอ ตัวอย่างเช่นดูaskubuntu.com/a/758307/295286 วางเมาส์เหนือส่วนการกระทำ ฉันจะดูฮ็อตคอร์นเนอร์มากขึ้น แต่ถ้าสิ่งเหล่านี้ไม่ได้ผลสคริปต์ที่กำหนดเองจะใช้ได้หรือไม่
Sergiy Kolodyazhnyy

หลายจอภาพหรือเดี่ยว?
Jacob Vlijm

สวัสดี orschiro โพสต์ โปรดระบุว่าทุกอย่างชัดเจน (หรือไม่)
Jacob Vlijm

เฮ้ฉันเห็นว่ามีฮ็อตคอร์นเนอร์มากกว่าคำตอบของฉัน คุณต้องการเท่าไหร่
Jacob Vlijm

2
@JacobVlijm, Serg, ดูคำตอบของฉัน
wjandrea

คำตอบ:


10

CCSM

  1. ติดตั้งตัวจัดการการตั้งค่า CompizConfig (CCSM) ทำงานใน terminal:

    sudo apt-get install compizconfig-settings-manager
  2. เปิด CCSM

  3. ไปที่ "คำสั่ง"
  4. ป้อนคำสั่งที่คุณต้องการในหนึ่งในช่อง เช่น:

    ภาพหน้าจอ CCSM - คำสั่ง

  5. ไปที่แท็บ "การผูกขอบ"

  6. คลิก "ไม่มี" และตั้งค่ามุมร้อนที่ต้องการ (หรือขอบ) ซึ่งสอดคล้องกับคำสั่งที่คุณเพิ่งตั้งค่า

    ภาพหน้าจอ CCSM - มุมที่ร้อนแรง

  7. เลื่อนเมาส์ไปที่มุม

  8. ตอนนี้คำสั่งของคุณจะถูกเรียกใช้!

    ภาพหน้าจอ CCSM - การเรียกใช้คำสั่ง

ยืนยันว่าทำงานกับ 14.04


ง่ายที่สุดของโซลูชันที่เสนอทั้งหมด หากคำสั่งที่ต้องการในการรับรู้ผ่านสคริปต์ดีกว่าเพียงแค่ทำให้คำสั่ง compiz ชี้ไปที่สคริปต์นั้นหรือเพียงแค่ชื่อสคริปต์หากสคริปต์อยู่ในโฟลเดอร์ถังขยะใน $ PATH ข้อเสียที่เป็นไปได้เท่านั้นคือความเป็นเอกภาพ / compiz เป็นที่ทราบกันดีว่าคำสั่งชุดผู้ใช้ที่ 'เสีย' แบบสุ่มคือคำสั่งที่ไม่ได้รวมอยู่ วิธีการรวมคำสั่งผู้ใช้อยู่นอกเหนือขอบเขตของคำถามนี้
doug

@wjandrea ดังนั้นมันจะถูกนำมาใช้หลังจากทั้งหมด Compiz ไม่ได้ทำให้ฉันประหลาดใจ คำตอบที่ดีที่สุดเหมาะสมที่สุดสำหรับสิ่งที่ OP ต้องการ +1 รายการ
Sergiy Kolodyazhnyy

น่าเสียดายที่คุณพูดถูกฮ่าฮ่า ใช่สิ่งที่ OP ต้องการ
Jacob Vlijm

คุณช่วยฉันออกมาสองสามครั้งด้วยการแก้ไขและคำตอบของคุณ มี "คุกกี้" เป็น ole'Serg ใช้ในการพูด ... แน่นอนมีครึ่งโหล :)
WinEunuuchs2Unix

6

คำสั่งที่กำหนดเอง

หากคุณกำลังใช้ Unity และติดตั้ง ccsm แล้วคำตอบของ wjandrea คือคำตอบของคุณแน่นอน หากไม่มีหรือใช้กับ distros อื่นทางเลือกน้ำหนักเบาอาจมีประโยชน์

ด้วยสคริปต์ด้านล่างนี้คุณสามารถตั้งค่าคำสั่งใดก็ได้โดยเฉพาะสำหรับฮอตคอร์ของคุณ

ตัวอย่างฉันทำการตั้งค่าต่อไปนี้:

  • ด้านบนซ้าย ไม่มีการดำเนินการ
  • Gedit วิ่งบนขวา
  • ล่างซ้าย ไม่มีการดำเนินการ
  • ล่างขวาเรียกใช้ Gnome-terminal

แน่นอนคุณสามารถทำให้คำสั่งเรียกใช้สคริปต์ภายนอก

นอกจากนี้คุณสามารถกำหนดขนาดของมุมที่ร้อนในบรรทัด:

cornersize = 10

เพียงแค่เปลี่ยนค่า (พิกเซล) สคริปต์จะกำหนดพื้นที่ (สี่เหลี่ยม) เพื่อเรียกใช้คำสั่งของคุณ:

ป้อนคำอธิบายรูปภาพที่นี่

บท

#!/usr/bin/env python3
import subprocess
import time

cornersize = 20

commands = [
    None,
    "gedit",
    None,
    "gnome-terminal",
    ]

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8").strip()

def get_pos():
    return [int(s.split(":")[1]) for s in get(["xdotool", "getmouselocation"]).split()[:2]]

scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
res = [int(n) for n in scrdata[resindex].split("+")[0].split("x")]

match1 = None

while True:
    time.sleep(1)
    xy = get_pos()
    x = xy[0]; y = xy[1]
    test = [
        [x < cornersize, y < cornersize],
        [x > res[0]-cornersize, y < cornersize],
        [x < cornersize, y > res[1]-cornersize],
        [x > res[0]-cornersize, y > res[1]-cornersize],
        ]
    match2 = [i for i, p in enumerate(test) if all(p)]
    if match2 != match1:
        if match2:
            cmd = commands[match2[0]]
            if cmd:
                subprocess.Popen(["/bin/bash", "-c", cmd])
    match1 = match2

ติดตั้ง

  1. สคริปต์ต้องการ xdotool

    sudo apt install xdotool
  2. คัดลอกสคริปต์ลงในไฟล์ว่างแล้วบันทึกเป็น hotcorners2.py
  3. ในส่วนหัวของสคริปต์ให้ตั้งค่าคำสั่งของคุณ (คำนึงถึงคำพูด)

    commands = [
        None,
        "gedit",
        None,
        "gnome-terminal",
    ]

    (ต่อมาบนซ้าย / ขวา, ล่างซ้าย / ขวา)

  4. ทดสอบ - รันสคริปต์:

    python3 /path/to/hotcorners2.py
  5. หากทำงานได้ดีให้เพิ่มในแอปพลิเคชันเริ่มต้น: Dash> แอปพลิเคชันเริ่มต้น> เพิ่ม เพิ่มคำสั่ง:

    /bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"

หมายเหตุ

  • สคริปต์ทำงานบนหน้าจอ (ครั้งแรก) สามารถแก้ไขได้อย่างง่ายดายเพื่อดูแลหน้าจอหลายหน้าจอแม้จะทำสิ่งต่าง ๆ ในหน้าจอที่แตกต่างกันโปรดพูดถึง
  • หากมีคนไม่กี่คนที่ชอบเราสามารถเพิ่ม gui และ ppa สำหรับการใช้งานที่สะดวกและติดตั้งง่าย

แก้ไข

หากเราใช้การคำนวณขั้นสูงอีกเล็กน้อยเราสามารถใช้รัศมีแทนพื้นที่สี่เหลี่ยมเพื่อเรียกใช้คำสั่ง (ขอบคุณ @pythagoras เก่าที่ดี):

ป้อนคำอธิบายรูปภาพที่นี่

ความแตกต่างเล็กน้อย แต่เพื่อความสนุก:

บท

#!/usr/bin/env python3
import subprocess
import math
import time

# set distance (hotcorner sensitivity)
radius = 20

# top-left, top-right, bottom-left, bottom-right
commands = [
    None,
    "gedit",
    None,
    "gnome-terminal",
    ]

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8").strip()

def get_pos():
    return [int(s.split(":")[1]) for s in get(["xdotool", "getmouselocation"]).split()[:2]]

# get the resolution
scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
res = [int(n) for n in scrdata[resindex].split("+")[0].split("x")]
# list the corners, could be more elegant no doubt
corners = [[0, 0], [res[0], 0], [0, res[1]], [res[0], res[1]]]

match1 = None

while True:
    time.sleep(1)
    pos = get_pos()
    # get the current difference from the mousepointer to each of the corner (radius)
    diff = [int(math.sqrt(sum([(c[i]-pos[i])**2 for i, n in enumerate(res)])))\
            for c in corners]
    # see if any of the corners is "approached" within the radius
    match2 = [diff.index(n) for n in diff if n < radius]
    # if so, and the corresponding command is not set to None, run it.
    if all([match2 != match1, match2]):
        cmd = commands[match2[0]]
        if cmd:
            subprocess.Popen(["/bin/bash", "-c", cmd])
    match1 = match2

การใช้

สวยมากเหมือนกัน ตั้งค่าคำสั่งของคุณและรัศมีเพื่อเรียกใช้ในส่วนหัวของสคริปต์


5

บันทึก:

คำตอบของ wjandrea เป็นคำตอบ ที่เหมาะสมที่สุดสำหรับคนที่ใช้ Ubuntu หรือ Ubuntu Kylin ที่เป็นค่าเริ่มต้น (หรือมี compiz เป็นเครื่องมือจัดการดิสเพลย์) ดังนั้นมันจึงทำให้ upvote และความเคารพของฉัน คำตอบที่ให้ไว้ด้านล่างสามารถใช้กับ Unity ได้เช่นกัน แต่อาจจะซ้ำซ้อนเล็กน้อย อย่างไรก็ตามในสภาพแวดล้อมเดสก์ท็อปที่ไม่มีคอมแพคเราสามารถใช้ตัวบ่งชี้ที่แสดงด้านล่าง ฉันได้ทดสอบสั้น ๆ ใน Lubuntu 16.04 VM ดังนั้นฉันรู้ว่ามันทำงานได้ที่นั่นและทำให้มันเข้ากันได้กับ Kylin 14.04 เช่นกัน สำหรับเดสก์ท็อป GNOME และ MATE คุณจะต้องได้รับการสนับสนุนสำหรับ AppIndicators ที่เปิดใช้งานก่อนเพื่อที่จะใช้ตัวบ่งชี้ใด ๆ

บทนำ

ฉันได้ติดตั้งแล้วindicator-edgerซึ่งอนุญาตให้เรียกใช้คำสั่งที่ผู้ใช้กำหนดโดยอิงจากตำแหน่งเมาส์ได้ทุกที่ตามขอบ 4 ของหน้าจอ ฉบับดั้งเดิมเสร็จภายในหนึ่งวันในเวลาประมาณ 7 ชั่วโมงจึงค่อนข้างเรียบง่าย แต่ทำงานได้

ป้อนคำอธิบายรูปภาพที่นี่

ตัวบ่งชี้จะถูกควบคุมผ่าน~/.edger-commands.jsonไฟล์อย่างชัดเจนในjsonรูปแบบ ผู้ใช้สามารถเขียนด้วยตนเองหรือตั้งค่าผ่านตัวDEFINE COMMANDSเลือกของตัวบ่งชี้ ตัวเลือกเปิดใช้งาน / ปิดใช้งานจะถูกจดจำและเขียนโดยอัตโนมัติไปยังไฟล์เพื่อความสะดวกของผู้ใช้ ไฟล์การกำหนดค่าตัวอย่างจะเป็นเช่นนั้น:

{
    "right": "gnome-terminal",
    "top": "firefox",
    "left": "",
    "bottom": "gnome-screenshot",
    "enabled": true
}

บันทึก"left"รายการในไฟล์ ขอบนั่นคือล้าง แต่เนื่องจากไวยากรณ์มันต้องมีสตริงที่ว่างเปล่ามีคำพูดเช่นjson""

เมื่อตัวบ่งชี้ตรวจพบว่าผู้ใช้วางเมาส์ไว้ที่ขอบใด ๆ (ด้วยระยะขอบ ~ 3 พิกเซล) ตัวบ่งชี้จะส่งการแจ้งเตือนฟองและเรียกใช้คำสั่งที่เหมาะสม (ถ้ากำหนด) การเปิดใช้งานทริกเกอร์จะไม่ทำซ้ำเว้นแต่ว่าผู้ใช้เลื่อนเมาส์ออกจากขอบ

ป้อนคำอธิบายรูปภาพที่นี่

ดังที่คุณเห็นจากภาพด้านบนตัวบ่งชี้ยังมีการดีบักเอาต์พุตในบรรทัดคำสั่ง หากคุณพบข้อบกพร่องใด ๆ รู้สึกฟรีเพื่อเรียกใช้งานจากสถานีพบว่ามีอะไรผิดพลาดเกิดขึ้นและส่งรายงานข้อผิดพลาดที่เหมาะสมในประเด็นที่หน้าของโครงการ GitHub

ขณะนี้ยังไม่มีการรองรับมุม (เฉพาะขอบ) และมันถูกสร้างขึ้นสำหรับการตั้งค่าหนึ่งจอภาพ (เห็นได้ชัดว่าไม่สามารถครอบคลุมฐานทั้งหมดได้ภายใน 7 ชั่วโมงของการสร้าง) แต่คุณลักษณะเหล่านั้นอาจมีในที่สุดในอนาคต

การติดตั้งและรหัสต้นฉบับ

รหัสที่มาที่มีอยู่ในโครงการGitHubหน้าหรือผ่านทางLaunchpad ทำการติดตั้งผ่านคำสั่งต่อไปนี้ในเทอร์มินัล:

sudo add-apt-repository ppa:1047481448-2/sergkolo
sudo apt-get update
sudo apt-get install indicator-edger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.