Командний рядок для перемикання між профілями в gnome-терміналі


20

Я створив новий профіль для gnome-terminal, і я можу переключатися між профілем "Неявно" та новим створеним профілем, як ви бачите на зображенні нижче:

Перемикатися між профілями в gnome-терміналі

Тепер мені цікаво, як я можу перемикатися між профілями, використовуючи командний рядок / скрипт або, можливо, використовувати для цього ярлик.

Примітка. Рішення типу:

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

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


1
За допомогою gconftool-2 ви можете встановити профіль, зміни якого негайні. Ви перевірили це з -> stackoverflow.com/questions/660442 / ...
Stormvirux

@Stormvirux Ні ... Тож чи можете ви пояснити, як використовувати gconftool або gconftool-2 для перемикання профілю? Я не бачу хорошої відповіді / пояснення там.
Radu Rădeanu

Відповіді:


9

Щоб перейти на "неявний" профіль:

xdotool key Alt+t p Return

Для переходу на другий профіль:

xdotool key Alt+t p Down Return

xdotool Встановіть xdotool не встановлено за замовчуванням в Ubuntu, тому його потрібно встановити спочатку.

Звичайно, для цих команд можна додати спеціальні комбінації клавіш .


Це не ярлик. Ви лише імітуєте натискання клавіш, це лише мнеміка програми.
Брайям

1
@Braiam Так, це не ярлик, я бачу. Як я запитав, це командний рядок (див. man xdotoolДокладнішу інформацію), який працює саме так, як я хочу, і я задоволений цією відповіддю, поки не з’явиться щось краще. ;)
Раду Радеану

Ви серйозно повинні подумати про те, що можна сказати, що в гадувальнику ...
Браям

@Braiam Як я вже казав вам, я добре з цим рішенням, він працює як шарм. Що стосується вашої пропозиції, є одна в цьому сенсі від 2002 року (модифікована в 2010 році: " Було б дуже приємно, якщо я можу використати рівно два натискання клавіш, щоб відкрити профіль, який я обрав " - див. Цей коментар ). Отже, чому ви вважаєте, що я повинен додати новий? Ви любите дублікати?
Radu Rădeanu

Це більше не працює на жаль
RobAu

5

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

Клавіша комбінації клавіш + 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

FYI для мого xdotool --clearmodifiersповинен прийти після key.
lilydjwg

4

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

Ви можете змінити профіль на поточній вкладці або вікні Терміналу, вибравши профіль із Терміналу ▸ Змінити профіль.

(Ви можете запропонувати це як пропозицію в трекері помилок )


Насправді є ярлик: Alt + T, а потім P , Стрілка вгору або Стрілка вниз та Enter . Але це трохи довго ...
Раду Радеану

@ RaduRădeanu Alt + T не працює в моєму терміналі 3.8.3: /
Braiam

1
@ RaduRădeanu Я думаю Alt + T є насправді з допомогою графічного інтерфейсу, це просто не з допомогою миші.
місяць.музик

@Braiam Якщо ви використовуєте неанглійську версію програми gnome-terminal, натисніть altі подивіться, який лист виділяється для вашої мовної версії "Термінал" (це 5-й елемент у моїй польській версії, ліворуч від "Довідки"), тоді використовуйте цей лист з alt.
місяць.музик

@ moon.musick Я використовую версію Debian gnome-terminal 3.8.3 і, здається, у неї немає модифікатора Alt для доступу до меню.
Брайам

3

Я хотів зробити те саме, і, нарешті, почав працювати сценарій, я поставив його на своєму GitHub .

Як я пояснював у README.md, він насправді не перемикається, але завантажує конфігурацію профілів у профіль за замовчуванням. Для цього конфігурація кожного профілю зберігається у файлі під час першого запуску сценарію. Сценарій здається, що ви переходите між профілями, що для мене досить добре. Сподіваюся, це допоможе комусь ...


2

Залежно від вашої мети, цей сценарій може бути корисним: https://github.com/xyrix/gnome-terminal-profile-switcher

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

Сподіваємось, що приклад сценарію safe_ssh дасть зрозуміти :-). Я використовую його вже трохи більше року, і це допомогло мені не знищити живу базу даних компанії ^ _ ^


2

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

Спочатку зробіть окремий профіль gnome-terminal для кожного віддаленого місця, яке ви часто використовуєте. Потім у кожному профілі вкажіть, що термінал повинен виконувати команду входу в 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

... але тоді ви втрачаєте гнучкість визначення свого імені для входу для цього поля. Цю додаткову особливість сценарію я залишаю читачеві як вправу.


Дякуємо, що надали мені цю ідею. :-) Я хочу додати, що ви можете легко написати .desktop файл, який відкриє ваші улюблені місця за допомогою (подвійного) клацання таким чином.
Гінз

1

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

Отже, це setterm -term linux -background black -foreground greenдасть вам чорний фон із зеленим текстом. Єдина проблема полягає в тому, що ls має кольоровий вихід, тому ви можете вимкнути забарвлення ls. Інакше він скидає попередню колірну гамму

Оригінальний пост : Існує такий собі спосіб. Від людини gnome-термінал:

--window-with-profile = 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 .

Надзвичайно, що сам термінал не дозволяє конфігурувати через термінал!


0

Було б чудово, щоб gnome-terminal запропонував команду та ярлик "next profile"; на жаль, це не так.

Для вирішення проблем із Alt+Tобмеженими можливостями (Правка> Налаштування> Увімкнути мнемоніку - не встановлено F10 left left down rightпрапорці ) є: і виберіть профіль. Ой.


Варто зазначити, що для цього потрібна видимість рядка меню.
Готьє

0

Це досить стара публікація, але, оскільки вона постійно з'являлася, коли я шукав вирішити цю саму проблему, я думав, що опублікую своє рішення.

Це передбачає невеликий скрипт python та перезапис клавіші CTRL + ALT + T для запуску сценарію, а не просто запуску терміналу.

Створіть текстовий файл, я назвав mine 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, оскільки це ярлик, який я використовую для відкриття вікна терміналу.

Обов’язково створіть кілька профілів у своєму терміналі. Цей сценарій використовуватиме всі ваші профілі. Отже, чим більше ви створюєте, тим більше варіацій для Windows ви також можете отримати доступ. У мене є кілька однакових за винятком кольору тла. Це допомагає мені розпізнати їх, коли я перекладаю вкладки через них.

Приклад вікна терміналу

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.