Командная строка для переключения между профилями в gnome-терминале

20

Я создал новый профиль для gnome-терминала, и я могу переключаться между «неявным» профилем и новым созданным профилем, как вы можете видеть на изображении ниже:

Переключение между профилями в gnome-терминале

Теперь мне интересно, как я могу переключаться между профилями, используя командную строку / скрипт или, возможно, использовать ярлык для этого.

Примечание: решения, такие как:

gnome-terminal --tab-with-profile=Implicit && exit 

исключены, потому что я предпочитаю не закрывать и открывать другой терминал или получить другое окно терминала в этом процессе изменения профиля.

Раду Рэдяну
источник
1
С gconftool-2 вы можете установить профиль, изменения которого происходят немедленно. Вы проверили это -> stackoverflow.com/questions/660442/…
Stormvirux
@Stormvirux Нет ... Так вы можете объяснить, как использовать gconftool или gconftool-2 для переключения профиля? Я не вижу там хорошего ответа / объяснения.
Раду Радеану
повторяющийся вопрос: askubuntu.com/questions/247041/…
Jakob

Ответы:

9

Чтобы переключиться на «неявный» профиль:

xdotool key Alt+t p Return

Чтобы переключиться на второй профиль:

xdotool key Alt+t p Down Return

xdotool Установите xdotool по умолчанию не устанавливается в Ubuntu, поэтому сначала его нужно установить.

Конечно, для этих команд могут быть добавлены пользовательские сочетания клавиш .

Раду Рэдяну
источник
Это не ярлык. Вы только симулируете нажатия клавиш, это только мнемоника приложения.
Брайам
1
@ Брайам Да, это не ярлык, я вижу. Как я и просил, это командная строка (см. man xdotoolДополнительную информацию), которая работает именно так, как я хочу, и я рад этому ответу, пока не появится что-то лучшее. ;)
Раду Радеану
Вы серьезно должны подумать о том, чтобы предположить, что в багтрекер ...
Брайам
@Braiam Как я уже говорил, я согласен с этим решением, оно работает как шарм. Что касается вашего предложения, есть одно в этом смысле от 2002 года (измененное в 2010 году: « Было бы очень приятно, если бы я мог использовать ровно два нажатия клавиш, чтобы открыть профиль по своему выбору». - см. Этот комментарий ). Итак, почему вы думаете, что я должен добавить новый? Тебе нравятся дубликаты?
Раду Радеану
Это больше не работает к сожалению
RobAu
5

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

Сочетание клавиш Shift + F10 откроет всплывающее меню (эквивалент щелчка правой кнопкой мыши на терминале), и оттуда профиль можно изменить.

например, xdotool key shift+F10 r 3чтобы попасть в третий профиль

Я также обнаружил, что этот метод не требует установки задержки для xdotool (что я нашел необходимым для метода строки меню), поэтому он немного быстрее.

Я склонен много менять профили, поэтому я превращаю это в функцию:

function chp(){
      xdotool --clearmodifiers key Shift+F10 r $1
}

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

Еще несколько советов и особенностей моей установки:

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

  • Я цветовой код моих сессий SSH на основе хоста, но мне не нравится мой псевдоним SSH для открытия новых вкладок или окон И я хочу, чтобы профиль вернулся к настройкам по умолчанию при выходе из SSH. Мое решение: alias somehost="chp 2; ssh user@somehost; chp 1"

  • Я даю флаг xdotool, --clearmodifiersчтобы, если мне случится держать клавишу-модификатор (при открытии вкладки / окна, выходе из ssh и т. Д.), Это не помешает работе xdotool.

  • Я добавляю имена в моем профиле с номерами, чтобы, если я добавлю новый, он не сдвинул все остальные из-за алфавитного расположения меню профиля

brotherJ4mes
источник
... просто обратите внимание, что этот метод требует, чтобы в настройках терминала была включена клавиша ускорения меню> general
brotherJ4mes
К твоему сведению, мой xdotool --clearmodifiersдолжен прийти после key.
lilydjwg
4

Там нет ярлыка, который позволяет вам изменить профиль в терминале (без навигации по меню, как вы сказали в комментариях), без использования графического интерфейса. Цитирование руководства ( стабильная , разработка 3.9 ):

Вы можете изменить профиль на текущей вкладке или в окне терминала, выбрав профиль из терминала Terminal Изменить профиль.

(Вы можете предложить это как предложение в трекере ошибок )

Braiam
источник
На самом деле, есть сочетание клавиш: Alt + T, затем P , Стрелка вверх или Стрелка вниз и Enter . Но это немного долго ...
Раду Рэдяну
@ RaduRădeanu Alt + T не работает в моем терминале 3.8.3: /
Braiam
1
@ RaduRădeanu Я думаю Alt + T является на самом деле с помощью графического интерфейса, это просто не с помощью мыши.
moon.musick
@Braiam Если вы используете неанглийскую версию gnome-terminal, нажмите altи посмотрите, какая буква выделяется для вашей языковой версии «Терминала» (это 5-й пункт в моей польской версии, слева от «Справки»), затем используйте эту букву с alt.
moon.musick
@ moon.musick Я использую версию gnome-терминала 3.8.3 для Debian и, похоже, в нем нет модификатора Alt для доступа к меню.
Брайам
3

Я хотел сделать то же самое и, наконец, получил работающий скрипт, я поместил его на свой GitHub .

Как я объясняю в README.md, на самом деле он не переключается, а загружает конфигурацию профилей в профиль по умолчанию. Для этого конфигурация каждого профиля сохраняется в файл при первом запуске скрипта. Скрипт создает впечатление, что вы переключаетесь между профилями, что для меня достаточно. Надеюсь, это кому-нибудь поможет ...

SigiSang
источник
2

В зависимости от вашей цели, этот скрипт может оказаться полезным: https://github.com/xyrix/gnome-terminal-profile-switcher

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

Надеемся, что пример сценария safe_ssh прояснит ситуацию :-). Я использую его чуть больше года, и это помогло мне не уничтожить живую базу данных компании ^ _ ^

xyrix
источник
2

Если у вас есть список серверов, к которым вы часто обращаетесь, я считаю, что самым простым решением было бы просто вызвать второе окно только для сеанса этого ящика.

Сначала создайте отдельный профиль gnome-терминала для каждого удаленного местоположения, которое вы часто используете. Затем в каждом профиле укажите, что терминал должен выполнить команду входа SSH для этого поля вместо простой оболочки.

ssh alice@athena

Наконец, напишите короткий скрипт для запуска нового удаленного окна с указанным идентификатором профиля.

#!/bin/bash
if [[ $# -ne 1 ]] ; then
  echo "Give me a server/profile name!"
  exit 1
fi
gnome-terminal --window-with-profile=$1
exit 0

Используя эту стратегию, вы можете «бесконечно» изменять внешний вид окна терминала каждого блока и запускать их с одного «контрольного» терминала. Например, если мы назовем этот скрипт «rlv», то мы можем создать удаленное окно, просто вызвав скрипт с именем профиля.

>> rlv athena

Если вы когда-нибудь нажмете имя хоста или не захотите настроить профиль для этого хоста, то вы просто получите другое окно профиля по умолчанию в локальном окне. Есть способ закодировать скрипт, чтобы избежать этого, поместив логин в сам скрипт, а не в gnome-терминал:

#!/bin/bash
if [[ $# -ne 1 ]] ; then
  echo "Give me a server/profile name!"
  exit 1
fi
gnome-terminal --window-with-profile=$1 -e "ssh $1"
exit 0

... но тогда вы теряете гибкость определения вашего имени пользователя для этого поля. Эту дополнительную особенность сценария я оставляю читателю в качестве упражнения.

zerobandwidth
источник
Спасибо за предоставленную мне эту идею. :-) Я хотел бы добавить, что вы можете легко написать файл .desktop, который откроет ваши любимые места двойным щелчком мыши.
Хинц
1

Я только что заметил, что мое первоначальное решение уже отклонено в вопросе. Хотя кажется, что нет простого способа изменить профиль, вы можете изменить цвет фона / переднего плана с помощью settermкоманды.

Таким образом, это setterm -term linux -background black -foreground greenдаст вам черный фон с зеленым текстом. Единственная проблема заключается в том, что ls имеет цветной вывод, так что вы можете отключить его. В противном случае он сбрасывается на предыдущую цветовую схему

Оригинальный пост : есть своего рода обходной путь. От человека гном-терминал:

--window-с-профилем = PROFILENAME

             Open a new window containing a  tab  with  the
             given profile.  More than one of these options
             can be provided.

Вот пример с моей машины. У меня есть три профиля: B & G (черный на зеленом), ForPrinting (черный шрифт, белый фон) и Default. Так что я делаю в текущем типе окна gnome-terminal --window-with-profile=ForPrinting. Затем я могу либо убить старое окно из командной строки, либо переключиться и закрыть его графически.

Профиль B & G не работает. Вероятно, потому что & не является допустимым символом, так что имейте это в виду при именовании профилей.

Сергей Колодяжный
источник
0

Очень уродливое решение, которое я в конечном итоге использовал

unset x y
eval $(xwininfo -id $(xdotool getactivewindow) |
       sed -n -e 's/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=\1/p' \
              -e 's/^ \+Absolute upper-left Y: \+\([0-9]\+\).*/y=\1/p')
xdotool mousemove $(($x + 50)) $(($y + 50))
xdotool click 3; xdotool key --repeat 3 Up; xdotool key Right; xdotool key --delay 50 Down; xdotool key --delay 50 Return

(Это выбирает второй профиль, но вы можете изменить его, чтобы сказать htir профиль, изменив вторую команду «клавиша вниз» на xdotool key --delay 50 --repeat 2 Down.

Что это делает:

  1. найдите верхние левые координаты текущего окна (например, используемый терминал gnome).
  2. наведите курсор мыши на этот терминал
  3. щелкните правой кнопкой мыши и перейдите в контекстное меню, чтобы выбрать второй профиль.

Вам нужно установить xdotool sudo apt install xdotool.

Видно, что сам терминал не разрешает настройку через терминал!

SColvin
источник
0

Было бы здорово, если бы gnome-terminal предложил команду «следующий профиль» и ярлык; к сожалению, это не так.

Обходной путь для тех, у кого Alt+Tотключено («Правка»> «Настройки»> «Включить мнемонику - не отмечен»): F10 left left down rightи выберите профиль. Уч.

Марио
источник
Стоит отметить, что для этого требуется, чтобы строка меню была видимой.
Готье
0

Это довольно старая публикация, но поскольку она продолжала появляться, пока я искал решение той же проблемы, я подумал, что опубликую свое решение.

Это включает небольшой скрипт на python и переназначение кнопки CTRL + ALT + T для запуска скрипта вместо простого запуска терминала.

Создайте текстовый файл, я назвал мой Terminal.py и убедитесь, что он исполняемый. Поместите в него следующий код. Это откроет окна терминала, используя все доступные профили в последовательности, убедившись, что тот, который помечен как «по умолчанию», является первым в списке.

#!/usr/bin/python
#
# Launch a gnome-terminal window trying to assign each new window 
# to a different profile.
# 
import json
import os
import commands

profiles=[]

try:
    profileList = commands.getoutput("gsettings get org.gnome.Terminal.ProfilesList list").replace("'",'"')
    profileDefault = commands.getoutput("gsettings get org.gnome.Terminal.ProfilesList default").replace("'",'"')

    profiles.append(json.loads(profileDefault))
    ls = json.loads(profileList)
    ls.remove(profiles[0])
    profiles+=ls

    # find the next available terminal number
    # when terminals are closed, gaps in the numbers can happen
    # terminals are numeric and the lowest slot is filled first
    terminals = commands.getoutput("ls /dev/pts/  | grep -E '^[0-9]+$'").split("\n")
    next = 0
    try:
        while terminals.index(str(next))>=0:
            next += 1
    except:
        pass

    # determine the profile to use
    prof = next % len(profiles)

    # launch the terminal with the specific profile
    cmd="gnome-terminal --window-with-profile='%s'" % (profiles[prof])
    os.system(cmd)
except:
    # if anything fails, launch a default terminal
    print("error")
    os.system("gnome-terminal")

Используйте утилиту настройки клавиатуры, чтобы назначить новый ярлык этому сценарию. Для меня я переназначил CTRL + ALT + T, потому что это ярлык, который я использую для открытия окна терминала.

Обязательно создайте несколько профилей в своем терминале. Этот скрипт будет использовать все ваши профили. Таким образом, чем больше вы создаете, тем больше вариантов окон вы тоже можете получить доступ. У меня есть несколько идентичных, за исключением цвета фона. Это помогает мне распознать их, когда я через них нажимаю alt-tab.

Пример окна терминала

schworak
источник