Мені дуже подобаються гарячі куточки. :-)
Чи можна якось запустити спеціальну команду в гарячому куті, як показано нижче?
Мені дуже подобаються гарячі куточки. :-)
Чи можна якось запустити спеціальну команду в гарячому куті, як показано нижче?
Відповіді:
Встановіть менеджер налаштувань CompizConfig (CCSM). Запуск у терміналі:
sudo apt-get install compizconfig-settings-manager
Відкрите СКСМ.
Введіть бажану команду в один із слотів. Наприклад:
Перейдіть на вкладку "Прив’язка до країв"
Клацніть "None" і встановіть потрібний гарячий кут (або край), який відповідає команді, яку ви тільки що встановили
Пересуньте мишу в кут
Тепер ваша команда виконується!
Підтверджено роботу 14.04.
Якщо ви використовуєте Unity і у вас встановлено ccsm, відповідь wjandrea - це, звичайно, ваша відповідь. Якщо ні , або для використання в інших дистрибутивах, може бути корисною легкою альтернативою.
За допомогою сценарію нижче ви можете встановити будь-яку команду, характерну для кожного з ваших гарячих корнерів.
Як приклад, я зробив наступне налаштування:
Звичайно, ви також можете змусити команди виконувати зовнішні сценарії.
Крім того, ви можете встановити розмір гарячого кута в рядку:
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
Сценарій потребує xdotool
sudo apt install xdotool
hotcorners2.py
У голові сценарію встановіть свої команди (пам’ятайте про цитати)
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
(згодом лівий / правий, нижній лівий / правий)
Тестовий запуск сценарію:
python3 /path/to/hotcorners2.py
Якщо все працює добре, додайте до програми запуску програми: тире> програми запуску> Додати. Додайте команду:
/bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"
Якщо ми використовуємо трохи більш досконалі обчислення, ми можемо використовувати радіус замість квадратної площі для запуску команд (завдяки старому доброму @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
Це майже те саме. В головному розділі сценарію встановіть свої команди та радіус для запуску.
Відповідь wjandrea є найбільш прийнятною відповіддю для тих, хто використовує Ubuntu або Ubuntu Kylin (або має compiz в якості менеджера дисплеїв), таким чином він отримує мою нагоду та повагу. Відповідь, надана нижче, може бути використана і в Unity, але, ймовірно, буде дещо зайвою. Однак у робочих середовищах, у яких немає compiz, можна використовувати індикатор, представлений нижче. Я коротко перевірив його в 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