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?
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?
Câu trả lời:
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
Mở CCSM.
Nhập lệnh bạn muốn vào một trong các vị trí. Ví dụ:
Chuyển đến tab "Ràng buộc cạnh"
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
Di chuyển chuột đến góc
Bây giờ lệnh của bạn được chạy!
Xác nhận làm việc vào ngày 14.04.
Nếu bạn đang sử dụng Unity và đã 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:
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:
#!/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
Kịch bản cần xdotool
sudo apt install xdotool
hotcorners2.py
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)
Kiểm tra- chạy tập lệnh:
python3 /path/to/hotcorners2.py
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"
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):
Khác biệt nhỏ, nhưng chỉ để cho vui:
#!/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
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.
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.
Tôi đã triển khai indicator-edger
cho 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.
Các chỉ số được kiểm soát thông qua ~/.edger-commands.json
tậ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 COMMANDS
tù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 json
cú 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ư 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.
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