LINUX.ORG.RU

создание клавиатурного shortcut'а

 , ,


0

1

Хочу запуск терминала по шорткату. В системе arch+GNOME это достигается стандатными средствами GNOME. Выполняю Settings->Keyboards->Keyboards Shortcuts->Custom Shortcuts и в строке Commands протисываю команду для запуска терминала. У меня конкретно alacritty. Всё работает.

Теперь хочу созать шорткат для запуска tmux. Пытаюсь это проделать так, как описано: https://habr.com/ru/articles/746730/. Сами по себе скрипты работают правильно. Но вот попытка повесить запуск скрипта на комбинацию клавиш. провалилась. Ничего не получается.

При создании Custom Shortcuts в строке Commands пишу полный PATH к скрипту. Наверное, это неверно. А как правильно?

Гном капризен к комбинациям клавиш. Может занята или гном считает её неприемлемой.

Есть у меня в гноме запуск скрипта хоткеем. Делал через dconf-gsettings, хотя можно и стандартными графическими средствами. Если скрипт находится по стандартному пути, то достаточно имени файла.

$ dconf dump /org/gnome/settings-daemon/plugins/media-keys/
[/]
custom-keybindings=['/org/gnome/settings-daemon/plugins/media-keys/avnc/']

[avnc]
binding='<Primary><Alt>z'
command='avnc --version=2 --src=~/ --dest=/ -- --skin=deep256'
name='avnc'

avnc - шелл-скрипт, реально находится в /usr/local/bin.

andytux ★★★★★
()
Последнее исправление: andytux (всего исправлений: 4)

Не вижу по ссылке инструкции по созданию скрипта для запуска, там какой-то обзор терминалов.

Для запуска терминальной программы достаточно создать desktop файл, вручную или через alacarte, и повесить его на комбинацию клавиш. Скрипты излишни.

Aceler ★★★★★
()

У меня ощущение, что вы пытаетесь прямо из графической оболочки запустить tmux.

Так не сработает, tmux можно запустить только в эмуляторе терминала.

То есть, команда должна запускать терминал, и tmux в нём. Типа alacritty -e tmux.

Chiffchaff
()

Можно в конфиге алакритти прописать оболочку по умолчанию и просто запускать алакритти.

[terminal]
shell = { program = "tmux", args = [ "new-session", "-e", "SHELL=/usr/bin/fish" ] }

Ну и не факт что в шорткатах гнома можно писать произвольный шелл, со всякими &&.

neumond ★★
()
Ответ на: комментарий от Chiffchaff

tmux можно запустить только в эмуляторе терминала

Нет, нормально запускается без управляющего терминала, потом можно подключиться интерактивно. Хотя мне такой вариант (сервис в systemd) не понравился, и я остановился на запуске при инициализации шелла.

Но ТС, видимо, действительно ожидает, что волшебным образом должен появиться терминал.

anonymous
()
Ответ на: комментарий от andytux

Гном капризен к комбинациям клавиш. Может занята или гном считает её неприемлемой.

Не то, чтобы капризен, но в гноме куча комбинаций преднастроена, но в GUI не представлена. Их можно убрать через gsettings и вообще говоря это первое, что я делаю, когда настраиваю гном. Очень странно они сделали, конечно. Когда в первый раз с этим столкнулся, был удивлён.

vbr ★★★★★
()
Ответ на: комментарий от anonymous

Правильно ли я понимаю, что для запуска tmux надо сначала запустить терминал. Потом в уже в терминале собственно tmux. Обсуждавшийся скрипт выполняет всё от него требуемое только потому, что он сам запускается в уже готовом терминале.Без терминала, только по шорткату, никаого tmux’а не запустить?

miron_g
() автор топика
Ответ на: комментарий от miron_g

Вот ниже же задаёте тот же самый вопрос.

Для того, чтобы увидеть выполнение скрипта, который зависит от терминала, надо запустить сам терминал, и в нём скрипт.

Или вместе: konsole -e some_script.sh. При этом, если скрипт сразу завершается, то и консоль закроется вместе с ним.

Chiffchaff
()
Ответ на: комментарий от miron_g

Без терминала, только по шорткату, никаого tmux’а не запустить?

Он запустится, но потом к нему надо подключиться из эмулятора терминала. Выше уже была работающая команда: alacritty -e tmux. Если не надо никаких изысков, это будет работать.

Я использовал другой подход, через .bashrc:

_tmux_init(){

	local session=main
	local tmux=/usr/bin/tmux

	[[ -x "$tmux" ]] || return
	[[ -n $TMUX ]] && return

	if "$tmux" has-session -t "$session" 2>/dev/null; then # default session exists…
		if [[ ! $($tmux list-clients -t "$session") ]]; then # …and has no clients connected
			exec "$tmux" attach-session -t "$session"
		fi
	else
		exec "$tmux" new-session -s "$session"
	fi
}
_tmux_init

Создаёт сессию с фиксированным именем, либо подключается к ней, если она есть и к ней нет подключённых клиентов. В остальных случаях ничего не делает. (Если кто-то захочет воспользоваться этим вариантом, не имея 100% уверенности в своих силах, рекомендую убрать слово exec отовсюду.)

P.S.: вариант для fish:

function fish_tmux_init
	set -l tmux "/usr/bin/tmux"
	set -l session "main"
	if set -q TMUX
		return
	end
	if $tmux has-session -t $session 2>/dev/null
		if test -z ($tmux list-clients -t $session)
			exec $tmux attach-session -t $session
		end
	else
		exec $tmux new-session -s $session
	end
end
anonymous
()