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

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

Switch between profiles in gnome-terminal

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

Примечание: Решения типа:

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

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

27
задан 14 November 2013 в 21:51

11 ответов

"იმპირულ" პროფილზე გადასასვლელად:

xdotool key Alt+t p Return

მეორე პროფილი:

xdotool key Alt+t p Down Return

xdotool Install xdotool ნაგულისხმევად არ არის დაინსტალირებული Ubuntu- ში, ამიტომ ის ჯერ უნდა იყოს დაინსტალირებული.

რა თქმა უნდა, ამ ბრძანებებისათვის შეიძლება დაემატოს კლავიატურის მორგებული მალსახმობები .

9
ответ дан 14 November 2013 в 21:51

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

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

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

4
ответ дан 14 November 2013 в 21:51

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

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

например xdotool key shift + F10 r 3 для перехода к третьему профилю

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

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

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

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

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

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

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

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

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

8
ответ дан 14 November 2013 в 21:51

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

Во-первых, создайте отдельный 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-terminal:

#!/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

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

2
ответ дан 14 November 2013 в 21:51

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

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

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

2
ответ дан 14 November 2013 в 21:51

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

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

3
ответ дан 14 November 2013 в 21:51

Было бы будь отличным gnome-terminal, предлагал команду и ярлык "следующий профиль"; К сожалению, это не так.

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

1
ответ дан 14 November 2013 в 21:51

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

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, изменив вторую команду "key Down" на xdotool key --delay 50 --repeat 2 Down.

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

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

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

Необычно, что сам терминал не разрешает конфигурирование через терминал!

0
ответ дан 14 November 2013 в 21:51

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

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

Исходный пост : Есть способ обойтись. Из man gnome-terminal:

- window-with-profile = PROFILENAME

  Открыть новое окно, содержащее вкладку с
  данный профиль.  Более одного из этих вариантов
  могут быть предоставлены.
 

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

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

1
ответ дан 14 November 2013 в 21:51

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

Это включает в себя небольшой скрипт 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.

Terminal Window Example

0
ответ дан 23 November 2019 в 01:52

Как иметь другую цветовую схему в каждом новом окне терминала

Принятый ответ с использованием xdotool работает, но содержит ошибок . Вот более простой способ.

Сначала объяснение, затем код.

Объяснение

  1. Есть способ создать новое окно терминала с указанным профилем, если вы знаете UUID.

     gnome-terminal --profile = '7e95bbb3-a584-469d-8ae1-75a08287f55a'
     

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

    • , когда мы открываем терминал с помощью ярлыка Ctrl Alt T
    • , когда мы открываем терминал с помощью значка на панели задач
    • , когда мы открываем терминал с помощью поиска
  2. gnome-terminal находится в / usr / bin / gnome-terminal и может быть обновлен дистрибутивом.

    / usr / local / bin предназначен для обычных пользовательских программ , а не , управляемых менеджером пакетов распространения, например локально скомпилированные пакеты. Вы не должны устанавливать их в / usr / bin , потому что будущие обновления дистрибутива могут изменить или удалить их без предупреждения.
    Источник

  3. $ PATH проверяет / usr / local / bin до / usr / local :

     $ echo $ PATH
     / home / generic / miniconda3 / condabin: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games  : / оснастка / bin
     

    Итак, мы можем создать файл / usr / local / bin / gnome-terminal , который будет иметь приоритет. Если нам когда-нибудь понадобится обойти нашу версию, нам придется использовать полный путь к исходному / usr / bin / gnome-terminal .

  4. Создайте этот файл и вставьте приведенный ниже код. Затем сделайте его исполняемым с помощью sudo chmod + x /usr/local/bin/gnome-terminal[1124507 provided.[12183 sizesCode[12184 providedExample Looks

    Я использую некоторые профили из https: //mayccoll.github.io/Gogh/ enter image description here


    Возможно, вы также можете использовать update-alternatives в качестве аналогичного альтернативного подхода. Я этого не проверял.

0
ответ дан 5 January 2021 в 23:21

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

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