Привязать команду к углу [dублировать]

Мне очень нравятся горячие уголки. : -)

Как-то можно запустить пользовательскую команду в горячем уголке, как показано ниже?

12
задан 14 February 2018 в 10:33

6 ответов

CCSM

Установите диспетчер настроек CompizConfig (CCSM). Запуск в терминале: sudo apt-get install compizconfig-settings-manager Открыть CCSM. Перейдите в «Команды». Введите желаемую команду в один из слотов. Например: Перейдите на вкладку «Края края». Нажмите «Нет» и установите желаемый горячий угол (или край), соответствующий команде, которую вы только что установили. Переместите мышь в угол. Теперь ваша команда запущена!

Подтверждена работа над 14.04.

10
ответ дан 17 July 2018 в 20:51

CCSM

Установите диспетчер настроек CompizConfig (CCSM). Запуск в терминале: sudo apt-get install compizconfig-settings-manager Открыть CCSM. Перейдите в «Команды». Введите желаемую команду в один из слотов. Например: Перейдите на вкладку «Края края». Нажмите «Нет» и установите желаемый горячий угол (или край), соответствующий команде, которую вы только что установили. Переместите мышь в угол. Теперь ваша команда запущена!

Подтверждена работа над 14.04.

10
ответ дан 23 July 2018 в 21:32

ПРИМЕЧАНИЕ:

ответ wjandrea является наиболее подходящим ответом для тех, кто использует Ubuntu по умолчанию или Ubuntu Kylin (или имеет compiz в качестве своего диспетчера дисплея), таким образом, он получает мое преимущество и уважение. Ответ, приведенный ниже, может быть использован и для Unity, но, вероятно, будет немного лишним. Однако в среде рабочего стола, где нет компилятора, можно использовать индикатор, представленный ниже. Я кратко протестировал его в Lubuntu 16.04 VM, поэтому я знаю, что он работает там и совместил его с Kylin 14.04.

Введение

Я реализовал indicator-edger, что позволяет запускать пользовательские команды на основе положения мыши в любом месте по 4 краям экрана. Первоначальная версия была сделана в течение одного дня, примерно через 7 часов, поэтому она довольно минималистична, но делает работу.

Ответ wjandrea

Индикатор управляется файлом ~/.edger-commands.json, очевидно, в формате json. Он может быть написан вручную пользователем или установлен через опцию DEFINE COMMANDS индикатора. Опция включения / отключения триггера запоминается и записывается автоматически для удобства пользователя. Пример файла конфигурации будет таким:

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

Обратите внимание на запись "left" в файле. Этот край не установлен, но из-за синтаксиса json он требует наличия пустой строки, т. Е. Кавычки "".

Как только индикатор обнаруживает, что пользователь поместил мышь вдоль любого из краев (с ~ 3 пикселя), индикатор отправит уведомление о пузыре и запустит соответствующую команду (если она определена).

Как вы можете видеть на скриншоте выше, индикатор также имеет отладочный вывод в командная строка. Если вы обнаружите какие-либо ошибки, не стесняйтесь запускать их с терминала, узнайте, что происходит с ошибкой, и отправьте соответствующий отчет об ошибке на .

В настоящее время нет поддержки углов ( только ребра), и он был создан для настройки с одним монитором (очевидно, нельзя покрыть все базы в течение 7 часов после создания), но эти функции могут быть доступны в будущем в будущем.

Установка и исходный код

Исходный код доступен на странице проектов GitHub или через Launchpad. Установка выполняется с помощью следующих команд в терминале:

sudo add-apt-repository ppa:1047481448-2/sergkolo sudo apt-get update sudo apt-get install indicator-edger
5
ответ дан 17 July 2018 в 20:51

Пользовательские команды

Если вы используете Unity и установили ccsm, ответ wjandrea - ваш ответ, конечно. Если это не так, или для использования на других дистрибутивах, может оказаться полезной альтернативу легкого веса.

С помощью приведенного ниже сценария вы можете установить команду и , специфичную для каждого из ваших hotcorners.

В качестве примера я сделал следующую настройку:

Вверху слева Нет действия Вверх Вправо Выполнить Gedit Нижнее левое Нет действий Нижнее правое правое Гном-терминал

Конечно вы также можете заставить команды запускать внешние скрипты.

Кроме того, вы можете установить размер горячего угла в строке:

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 Скопируйте сценарий в пустой файл, сохраните i как hotcorners2.py. В начале скрипта задайте свои команды (вспомните кавычки) commands = [ None, "gedit", None, "gnome-terminal", ] (впоследствии верхний левый / средний, нижний левый / правый) Проверить сценарий: python3 /path/to/hotcorners2.py Если все работает нормально, добавьте в приложения для запуска: Dash> Startup Applications> Add. Добавьте команду: /bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"

Примечания

Вверху слева Нет действия Если кому-то понравится, мы можем добавить gui и ppa для удобного использования и легкой установки.

EDIT

Если мы используем немного более сложные вычисления, мы можем использовать размер вместо квадратной области для запуска команды (спасибо старым старым @pythagoras):

Небольшая разница, но только для удовольствия:

Сценарий [ ! d52] #!/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
ответ дан 17 July 2018 в 20:51

ПРИМЕЧАНИЕ:

ответ wjandrea является наиболее подходящим ответом для тех, кто использует Ubuntu по умолчанию или Ubuntu Kylin (или имеет compiz в качестве своего диспетчера дисплея), таким образом, он получает мое преимущество и уважение. Ответ, приведенный ниже, может быть использован и для Unity, но, вероятно, будет немного лишним. Однако в среде рабочего стола, где нет компилятора, можно использовать индикатор, представленный ниже. Я кратко протестировал его в Lubuntu 16.04 VM, поэтому я знаю, что он работает там и совместил его с Kylin 14.04.

Введение

Я реализовал indicator-edger, что позволяет запускать пользовательские команды на основе положения мыши в любом месте по 4 краям экрана. Первоначальная версия была сделана в течение одного дня, примерно через 7 часов, поэтому она довольно минималистична, но делает работу.

Ответ wjandrea

Индикатор управляется файлом ~/.edger-commands.json, очевидно, в формате json. Он может быть написан вручную пользователем или установлен через опцию DEFINE COMMANDS индикатора. Опция включения / отключения триггера запоминается и записывается автоматически для удобства пользователя. Пример файла конфигурации будет таким:

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

Обратите внимание на запись "left" в файле. Этот край не установлен, но из-за синтаксиса json он требует наличия пустой строки, т. Е. Кавычки "".

Как только индикатор обнаруживает, что пользователь поместил мышь вдоль любого из краев (с ~ 3 пикселя), индикатор отправит уведомление о пузыре и запустит соответствующую команду (если она определена).

Как вы можете видеть на скриншоте выше, индикатор также имеет отладочный вывод в командная строка. Если вы обнаружите какие-либо ошибки, не стесняйтесь запускать их с терминала, узнайте, что происходит с ошибкой, и отправьте соответствующий отчет об ошибке на .

В настоящее время нет поддержки углов ( только ребра), и он был создан для настройки с одним монитором (очевидно, нельзя покрыть все базы в течение 7 часов после создания), но эти функции могут быть доступны в будущем в будущем.

Установка и исходный код

Исходный код доступен на странице проектов GitHub или через Launchpad. Установка выполняется с помощью следующих команд в терминале:

sudo add-apt-repository ppa:1047481448-2/sergkolo sudo apt-get update sudo apt-get install indicator-edger
5
ответ дан 23 July 2018 в 21:32

Пользовательские команды

Если вы используете Unity и установили ccsm, ответ wjandrea - ваш ответ, конечно. Если это не так, или для использования на других дистрибутивах, может оказаться полезной альтернативу легкого веса.

С помощью приведенного ниже сценария вы можете установить команду и , специфичную для каждого из ваших hotcorners.

В качестве примера я сделал следующую настройку:

Вверху слева Нет действия Вверх Вправо Выполнить Gedit Нижнее левое Нет действий Нижнее правое правое Гном-терминал

Конечно вы также можете заставить команды запускать внешние скрипты.

Кроме того, вы можете установить размер горячего угла в строке:

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 Скопируйте сценарий в пустой файл, сохраните i как hotcorners2.py. В начале скрипта задайте свои команды (вспомните кавычки) commands = [ None, "gedit", None, "gnome-terminal", ] (впоследствии верхний левый / средний, нижний левый / правый) Проверить сценарий: python3 /path/to/hotcorners2.py Если все работает нормально, добавьте в приложения для запуска: Dash> Startup Applications> Add. Добавьте команду: /bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"

Примечания

Вверху слева Нет действия Если кому-то понравится, мы можем добавить gui и ppa для удобного использования и легкой установки.

EDIT

Если мы используем немного более сложные вычисления, мы можем использовать размер вместо квадратной области для запуска команды (спасибо старым старым @pythagoras):

Небольшая разница, но только для удовольствия:

Сценарий [ ! d52] #!/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
ответ дан 23 July 2018 в 21:32

Другие вопросы по тегам:

Похожие вопросы: