Tôi có thể đặt Hot Corners để chạy các lệnh tùy chỉnh trong Unity không?


13

Tôi thực sự thích Hot Corners. :-)

Có phải bằng cách nào đó có thể chạy một lệnh tùy chỉnh trên một góc nóng như hình dưới đây?

nhập mô tả hình ảnh ở đây


Tôi không nghĩ điều đó có thể xảy ra với các hotcorn cụ thể (ít nhất là với cách Unity sử dụng chúng), nhưng có thể kích hoạt các tập lệnh khi chuột được đặt trong khu vực cụ thể của màn hình. Ví dụ: xem Askubfox.com/a/758307/295286 , phần hành động di chuột qua. Tôi sẽ tìm hiểu thêm về hotcorners, nhưng nếu những thứ đó không hoạt động, liệu kịch bản tùy chỉnh có ổn không?
Sergiy Kolodyazhnyy

Đa màn hình hay đơn?
Jacob Vlijm

Xin chào orschiro, đăng. Hãy đề cập nếu tất cả là rõ ràng (hoặc không).
Jacob Vlijm

Này, tôi thấy có nhiều bỏng ngô ở đây hơn là trong câu trả lời của tôi. Bạn thích bao nhiêu
Jacob Vlijm

2
@JacobVlijm, Serg, Xem câu trả lời của tôi.
wjandrea

Câu trả lời:


10

CCSM

  1. Cài đặt Trình quản lý cài đặt CompizConfig (CCSM). Chạy trong thiết bị đầu cuối:

    sudo apt-get install compizconfig-settings-manager
  2. Mở CCSM.

  3. Chuyển đến "Lệnh"
  4. Nhập lệnh bạn muốn vào một trong các vị trí. Ví dụ:

    Ảnh chụp màn hình CCSM - lệnh

  5. Chuyển đến tab "Ràng buộc cạnh"

  6. Nhấp vào "Không" và đặt góc nóng (hoặc cạnh) mong muốn của bạn, tương ứng với lệnh bạn vừa đặt

    Ảnh chụp màn hình CCSM - góc nóng

  7. Di chuyển chuột đến góc

  8. Bây giờ lệnh của bạn được chạy!

    Ảnh chụp màn hình CCSM - lệnh đang chạy

Xác nhận làm việc vào ngày 14.04.


Dễ nhất trong tất cả các giải pháp đề xuất. Nếu lệnh mong muốn được nhận ra tốt hơn thông qua một tập lệnh thay vì chỉ tạo lệnh compiz trỏ đến tập lệnh đó hoặc chỉ tập lệnh nếu tập lệnh nằm trong thư mục bin trong $ PATH. Chỉ có nhược điểm có thể là unity / compiz đã được biết là ngẫu nhiên 'mất' các lệnh do người dùng thiết lập, tức là những lệnh không được tích hợp. Làm thế nào để tích hợp một lệnh người dùng nằm ngoài phạm vi của câu hỏi này.
doug

@wjandrea Vì vậy, nó được thực hiện sau khi tất cả. Compiz không nắm bắt để làm tôi ngạc nhiên. Câu trả lời tốt, phù hợp nhất cho những gì OP tìm kiếm. + 1'ed
Sergiy Kolodyazhnyy

Thật không may, bạn đã đúng, haha. Có chính xác những gì OP yêu cầu.
Jacob Vlijm

Bạn đã giúp tôi khá nhiều lần với các chỉnh sửa và câu trả lời của bạn. Có một "cookie" như ole'Serg thường nói ... thực sự có nửa tá :)
WinEunuuchs2Unix

6

Lệnh tùy chỉnh

Nếu bạn đang sử dụng Unity đã cài đặt ccsm, tất nhiên câu trả lời của wjandrea là câu trả lời của bạn. Nếu không , hoặc để sử dụng trên các bản phát hành khác, một sự thay thế trọng lượng nhẹ có thể hữu ích.

Với đoạn script bên dưới, bạn có thể đặt bất kỳ lệnh nào , cụ thể cho từng hotcorners của bạn.

Ví dụ, tôi đã thực hiện các thiết lập sau:

  • Trên cùng bên trái Không có hành động
  • Top phải chạy Gedit
  • Dưới cùng bên trái Không có hành động
  • Dưới cùng RightRun Gnome-terminal

Tất nhiên bạn cũng có thể làm cho các lệnh chạy các kịch bản bên ngoài.

Hơn nữa, bạn có thể đặt kích thước của góc nóng trong dòng:

cornersize = 10

Đơn giản chỉ cần thay đổi giá trị (pixel). Tập lệnh đặt các vùng (hình vuông) để kích hoạt các lệnh của bạn:

nhập mô tả hình ảnh ở đây

Kịch bản

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

Thiết lập

  1. Kịch bản cần xdotool

    sudo apt install xdotool
  2. Sao chép tập lệnh vào một tập tin trống, lưu tôi dưới dạng hotcorners2.py
  3. Trong phần đầu của tập lệnh, đặt các lệnh của bạn (lưu ý các trích dẫn)

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

    (sau đó trên cùng bên trái / righ, dưới cùng bên trái / phải)

  4. Kiểm tra- chạy tập lệnh:

    python3 /path/to/hotcorners2.py
  5. Nếu tất cả đều hoạt động tốt, hãy thêm vào Ứng dụng khởi động: Dash> Ứng dụng khởi động> Thêm. Thêm lệnh:

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

Ghi chú

  • Kịch bản hiện đang chạy trên màn hình (đầu tiên). Nó có thể dễ dàng chỉnh sửa để chăm sóc nhiều màn hình, thậm chí làm những việc khác nhau trong các màn hình khác nhau, xin vui lòng đề cập.
  • Nếu một vài người thích nó, chúng ta có thể thêm gui và ppa để sử dụng thuận tiện và dễ dàng cài đặt.

BIÊN TẬP

Nếu chúng ta sử dụng điện toán nâng cao hơn một chút, chúng ta có thể sử dụng bán kính thay vì diện tích hình vuông để kích hoạt các lệnh (nhờ vào @pythagoras cũ tốt):

nhập mô tả hình ảnh ở đây

Khác biệt nhỏ, nhưng chỉ để cho vui:

Kịch bản

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

Sử dụng

Là khá nhiều như nhau. Đặt các lệnh của bạn và bán kính để kích hoạt, trong phần đầu của tập lệnh.


5

GHI CHÚ:

Câu trả lời của wjandrea là câu trả lời phù hợp nhất cho người sử dụng Ubuntu hoặc Ubuntu Kylin mặc định (hoặc có công cụ là người quản lý hiển thị của họ), do đó, nó nhận được sự tôn trọng và tôn trọng của tôi. Câu trả lời được cung cấp dưới đây, cũng có thể được sử dụng trên Unity, nhưng có lẽ sẽ hơi dư thừa. Tuy nhiên, trên các môi trường máy tính để bàn không có compiz, người ta có thể sử dụng chỉ báo được trình bày bên dưới. Tôi đã thử nghiệm nó một cách ngắn gọn trong Lubfox 16.04 VM, vì vậy tôi biết nó hoạt động ở đó và cũng tương thích với Kylin 14.04. Đối với máy tính để bàn Gnome và MATE, trước tiên bạn cần có hỗ trợ cho AppIndicators để sử dụng bất kỳ chỉ báo nào.

Giới thiệu

Tôi đã triển khai indicator-edgercho phép kích hoạt các lệnh do người dùng xác định dựa trên vị trí chuột ở bất kỳ đâu dọc theo 4 cạnh của màn hình. Phiên bản gốc đã được thực hiện trong vòng một ngày, trong khoảng 7 giờ, do đó nó khá tối giản nhưng thực hiện công việc.

nhập mô tả hình ảnh ở đây

Các chỉ số được kiểm soát thông qua ~/.edger-commands.jsontập tin, rõ ràng trong jsonđịnh dạng. Nó có thể được viết bằng tay bởi người dùng hoặc được đặt qua DEFINE COMMANDStùy chọn của chỉ báo . Tùy chọn kích hoạt / vô hiệu hóa được ghi nhớ và ghi tự động vào tệp để thuận tiện cho người dùng. Tệp cấu hình mẫu sẽ như vậy:

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

Lưu ý các "left"mục trong tập tin. Cạnh đó không được đặt, nhưng do jsoncú pháp, nó đòi hỏi phải có một chuỗi rỗng ở đó, tức là dấu ngoặc kép "".

Khi chỉ báo phát hiện người dùng đã đặt chuột dọc theo bất kỳ cạnh nào (với lề ~ 3 pixel), chỉ báo sẽ gửi thông báo bong bóng và chạy lệnh thích hợp (nếu được xác định). Kích hoạt kích hoạt sẽ không lặp lại trừ khi người dùng di chuyển chuột ra khỏi cạnh.

nhập mô tả hình ảnh ở đây

Như bạn có thể thấy từ ảnh chụp màn hình ở trên, chỉ báo cũng có đầu ra gỡ lỗi trong dòng lệnh. Nếu bạn tìm thấy bất kỳ lỗi nào, vui lòng chạy nó từ thiết bị đầu cuối, tìm hiểu lỗi nào xảy ra và gửi báo cáo lỗi thích hợp trên trang vấn đề của GitHub của dự án .

Hiện tại không có hỗ trợ cho các góc (chỉ các cạnh) và nó được xây dựng để thiết lập một màn hình (rõ ràng, người ta không thể bao gồm tất cả các cơ sở trong vòng 7 giờ sau khi tạo), nhưng cuối cùng các tính năng này sẽ có sẵn trong tương lai.

Cài đặt và mã nguồn

Mã nguồn có sẵn tại trang GitHub của dự án hoặc thông qua Launchpad . Cài đặt được thực hiện thông qua các lệnh sau trong thiết bị đầu cuối:

sudo add-apt-repository ppa:1047481448-2/sergkolo
sudo apt-get update
sudo apt-get install indicator-edger
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.