Ламповый Linux-like терминал в Windows

  • Tutorial

Вступление (лирическое)


Привет, Хабр!

Для меня, автоматизатора-линуксоида, использвание Windows на основной рабочей станции первое время было просто болью и страданием. Но с этим я ничего поделать не мог: корпоративные стандарты и софт, кторый работает только на Windows. В попытке найти золотую середину, я прошёл три стадии. Сначала я только изредка переключался на винду по необходимости. Затем виртуалка на virtualbox-е с X-server-ом. После этого захотелось хоть чуть-чуть того консольного комфорта, который был на линуксе (я использовал Terminator в качестве основного терминала).

После яростного гугления и установки всех эмуляторов терминала под Windows, которые только удалось найти, оказалось, что нет ни одного хоть немного подходящего мне. А хотелось, чтобы вёл себя терминал максимально приближенно к линуксовым вариантам. Например, естественно нужны табы, сплит, выделение текста с прокруткой (когда нужно выделить больше чем один экран), копирование текста в буфер сразу при выделении и т.д.

В итоге я получил «комбайн» как на скриншоте ниже. О том, как это настроить, можно узнать, заглянув под кат.




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

В процессе поиска хорошего терминала, я наткнулся на хабра-топик: Альтернативный терминал для Windows. ConEmu — приложение действительно классное, но оно не для тех, кто долгое время использовал линукс-терминалы. Затем я наткнулся на Mintty (был установлен вместе с Cygwin). Программка отличная, ведёт себя максимально близко к таким терминалам как Gnome-terminal и Terminator, но нет табов.

Оказалось, что вышеупомянутый ConEmu умеет запускать GUI-приложения внутри своих табов! И тут искра надежды начала разгораться… Но хватит лирики, пора приступить к делу!

Установка нужных программ


ConEmu ставим отсюда: code.google.com/p/conemu-maximus5
Mintty я ставил вместе с Cygwin: cygwin.com/install.html

Настройка


В ConEmu идём в Settings->Tasks и, нажимая плюсик, добавляем нужные таски как на скриншоте:



В нашем случае это:
Имя таска Команда
cygwin C:\Cygwin\bin\mintty.exe
ssh_local C:\Cygwin\bin\mintty.exe D:\Work\VMssh.bat
cmd cmd
powershell powershell

Осторожно! Адский CMD!

VMssh.bat:
@ECHO OFF
SET VMNAME=xubuntu

CALL D:\Work\VMstart.bat %VMNAME%

ssh user@localhost

Вызывает скрипт старта виртуалки, VMNAME заменить на нужное.

VMstart.bat:
@ECHO OFF

SET VMNAME="%1"
SET isVMRun=

IF [%1] == [] (
  echo Empty parameter VMNAME. Usage: %0 [name of vm]
  EXIT /B 1
)

FOR /F %%i IN ('VBoxManage list runningvms') DO SET isVMRun=%%i

IF NOT "%isVMRun%" == "%VMNAME%" (
 Vboxmanage startvm %VMNAME% --type headless
)

Проверяет запущена ли виртуалка и если нет, то запускает её. Таким образом, мне не нужно помнить запущена ли виртуалка, запускать отдельно VirtualBox и делать дополнительные клики.

Немного «свистелок»


Xoria-like тема для Mintty (~/.minttyrc):
ForegroundColour=208,208,208
BackgroundColour=28,28,28
CursorColour=255,175,0
IMECursorColour=128,224,160
Black=12,12,12
BoldBlack=10,10,10
Red=215,135,135
BoldRed=223,135,135
Green=175,215,135
BoldGreen=175,223,135
Yellow=247,247,175
BoldYellow=255,255,175
Blue=135,175,215
BoldBlue=135,175,223
Magenta=215,175,215
BoldMagenta=223,175,223
Cyan=175,215,215
BoldCyan=175,223,223
White=230,230,230
BoldWhite=238,238,238
BoldAsFont=no
Font=Consolas
FontHeight=11
CursorType=block
FontSmoothing=full
Term=xterm-256color
Scrollbar=none
Locale=
Charset=


Общая рабочая папка (файлы доступны на винде и на виртуалке) — нужно настроить в VirualBox-e следующим образом:



Также нужно прописать в fstab на виртуалке, чтобы автоматиечски монтировалось при старте.

Заключение


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

Скрипты и конфиг mynttyrc закинул на git-hub: github.com/morkot/windows-terminal-mutant.git

Для тех, кому не нужны GUI-табы и кто использует tmux, есть статья моего коллеги примерно на ту же больную тему: habrahabr.ru/post/196128.

Особая благодарность хабраюзеру Maximus5 за отличный Windows терминал ConEmu!
EPAM 192,22
Компания
Поделиться публикацией
Похожие публикации

Вакансии компании EPAM

Комментарии 59
  • +5
    А почему это?
    оно не для тех, кто долгое время использовал линукс-терминалы

    Может вы просто «не умеете его готовить»?
    • +14
      Для тех кто использовал долго линукс терминалы нет причин запускать Win OS ;)
      • +7
        Есть. Эти причины я перечислил в статье.
        • –6
          Как то не понятно, если мало работаете с виндой, то зачем все эти мучения, если много и винда ну совсем не нравится, не проще ли работу поменять? Ну как бы линукс админы вроде больше получают? Или нет?
          • +4
            Думаю, что менять дом, если начала мерцать лампочка в одной из комнат, не самое оптимальное ришение, вы так не считаете?
            • +2
              Лампочку-то можно поменять. А вот если в доме стоит неудобный диван, который по некоему договору нельзя поменять, то да — это повод сменить дом.
      • +1
        Может и не смог. Если подскажете как добится описанного поведения без использования mintty, буду только рад.
        Я, кстарти, вам писал как раз вопрос в issue tracker-е на google-code по этому поводу. И вы мне ответили, что именно «такого» поведения достичь не получится :)
        • +3
          О чем конкретно речь шла, не помню уже? Xterm256 в цигвине? Его цигвин сам обрабатывать пытается, да, безуспешно естественно…
          Только надо ли это реально? IMHO, все палитрами решается + расширенные цвета за счет одного фонового индекса.
      • +1
        а я просто ставил comemu + cygwin и запускал баш в комэму.
        • +1
          Есть два минуса:
          1) Не все работает в CygWin-е
          2) Как указано в статье, не такое поведение, как в линуксовых терминалах
        • 0
          «А хотелось, чтобы вёл себя терминал максимально приближенно к линуксовым вариантам. Например, естественно нужны табы, сплит, выделение текста с прокруткой (когда нужно выделить больше чем один экран), копирование текста в буфер сразу при выделении и т.д.»

          вроде кроме пайпа (это значек / передающий вывод одной проги в другую?) всё из коробки работает. Может пайп тоже работает, но меня не прижимало его искать.

          Табы (авто-комплит?) Ещё с w2k есть (но зачем то отключены в регистре там были), выделение прокруткой есть, копировать с Quick Edit Mode Rclick-ом Может ещё от версии винды зависить — с мелкомягких станется выключить какие то фичи для базовых версий.
          • 0
            «Табы» — имелось в виду не табуляция и GUI вкладки.
            Если я правильно понял понял ваш коментарий, то использование стандартного cmd терминала — вообще не вариант. Он ведёт себя абсолютно по-другому.
          • +2
            Так есть-же Terminator под Win… Правда требует Cygwin.
          • –19
            Какой смысл вы хотели вложить, использовав определение «ламповый» в заголовке?
            Вы имели когда-либо дело с ламповой техникой/оборудованием?!

            Удивительно как теперь используют слова…
            • +13
              «ламповый» используется в значении «старый добрый»
            • +4
              MobaXterm умеет все это и еще немного. Незаменимая тулза.
              mobaxterm.mobatek.net/
              • +1
                Хорошая программа, но не то, что мне нужно было. Насколько помню, поведение отличается и есть ограничения в бесплатной версии. Плюс X-сервер это уже слишком )
              • –6
                Что помешало использовать виртуализацию? Например, VMware Player бесплатный… Ах, да… У вас же коммерческое использование… Тогда Virtual PC…
                • +3
                  Virtual PC…

                  Что же вы сразу с харкора-то, ведь есть еще VirtualBox
                • +1
                  А разобраться в PowerShell не вариант? Спрашиваю исключительно из любопытства, потому что не любитель всякого рода эмуляторов.
                  • 0
                    Вариант, и разобрался. На одном из проектов использовал. Вкладку можно видеть на скриншоте.
                    Но чаще всего мне нужен терминал для ssh, vagrant, git и т.д. Я уже молчу о таких утилитах, как sed, grep, одностроки типа find -exec, for ..; do ..; done и т.д.
                    • +2
                      Кроме ssh всё можно сделать через powershell =)
                      • +1
                        Запустил сейчас в винде PowerShell, нажал кнопку «во весь экран», залез в настройки окна, выматерился, закрыл нафиг.
                        • +1
                          Я не пользуюсь «чистым» «окном» PowerShell обычно. Это выше моих сил.
                    • +1
                      Kopирование там может и есть, а табы и сплит окон как в Terminator?
                    • +1
                      Я предпринимал пару попыток разобраться, но спотыкался с самого начала.
                      Особенно «из коробки» использование PS вызывает нестерпимую боль.
                    • +4
                      А зачем cygwin то? Чем MSYS то плох? Я вообще в качестве среды юзаю git bash в conemu
                      • 0
                        Я не говорил, что плох. А Ruby/Python с ним использовать без плясок с бубном можно?
                        • +2
                          Вполне.
                          • +2
                            А как же кодировки? Комментарии к коммитам на русском корренктно отображаются?
                            • +3
                              Нет.
                              • +2
                                Не юзал русские буквы.
                                • +2
                                  Вполне себе показываются (в логе например), если выполнить

                                  git config core.pager "iconv.exe -f cp1251 -t utf-8 | less"
                          • +3
                            Неплохой терминал Xshell, можно пользоваться бесплатно в академических целях.
                            • +1
                              Выглядит многообещающе. Но для работы я его использвать не смогу. Верно?
                              • +2
                                По идее нет, но если что, я ни кому не скажу. :)))
                                Хотя, попробуйте триал, возможно Вам не жалко будет за него 89$ отдать.
                              • +2
                                Выглядит вполне достойно, только не могу понять как между табами с клавиатуры переключаться?
                                По биндингам кажется Alt+Left/Right, но не работает.
                                • +1
                                  Честно говоря, не помню, давно уже на винде не работаю.
                            • +3
                              Вот это я понимаю юникс-вэй: табы отдельно, основной функционал отдельно.
                              • +2
                                Прекрасная тулза. Не забывайте ставить шрифты Monaco или Consolas, и приятная работа Вам обеспечена.

                                Доступна через репозиторий chocolatey.org.
                                • +1
                                  Полностью согласен с вами. Как видно из конфига, я как раз использую Consolas. Как писал уже выше, к сожалению не получилось использовать этот терминал как есть, без mintty.
                                  • +1
                                    А мне Ubuntu Mono очень нравится. + фон поставил как у убунтового терминала в Putty.
                                    • +1
                                      Не очень качественный шрифт. Особенно буква «М», как заглавная, так и строчная. Но это тоже скорее дело вкуса.
                                  • +1
                                    Я думал что SecureCRT и Windows PowerShell (ISE) спасут мир. О Боже как я заблуждалсо!
                                    • 0
                                      Ага, особенно они помогут при удалённом администрировании linux-серверов.
                                      • +1
                                        Вот в этом ваша проблема сэр. Вы городите всякие грабли и даже не в курсе что является стандартом клиента ssh. А то, что вам не впаяли минус в карму, а у мне впаяли… говорит о том что хабр попсеет. И не вы один тут такой. Кто не знает для чего нужен SecureCRT. Печалько.
                                        • +1
                                          Спасибо за инфу о SecureCRT. На досуге обязательно посмотрю.

                                          А почему вы, не городящий граблей, не написали статью об этом стандарте и как не городить эти самые грабли а «правильно» админить серверы с винды? — Ах, да… у вас же нет кармы, и вы очень сильно по этому поводу переживаете. Знаете, таких как вы, тоже много развелось, которые в каждом коментарии плачут по поводу свой кармы. А нажать reset в профиле и написать статью не пробовали? Поделится своими знаниями?
                                    • +2
                                      Есть еще PuttyCM который является надстройкой с табами для Putty.
                                      А сам Putty умеет все остальное кроме табов.
                                      • +1
                                        Если бы вы пользовались линуксовыми терминалами, а потом попробовали бы Putty, пусть даже и с табами, то вы бы почувствовали всю неполноценность этого инструмента.
                                        • +2
                                          Думаю, что это субъективное, т.к. я переходил в обратную сторону с Putty на Linux и как раз почувствовал то что вы пишете :)
                                          • +1
                                            Согласен, что субъективное. Но так сложилось, что линуксоиды обычно больше сидят в консоли, соотвтественно большее разнообразие и функциональность эмуляторов терминала.
                                      • +2
                                        В подобной ситуации mintty мне не понравился тем, что забирает на себя фокус при выделении мышью. Потом приходится совершать лишние телодвижения, чтобы вернуть фокус в ConEmu. А без этого невозможно переключаться между вкладками с клавиатуры.
                                        Для себя выбрал ConEmu + cygwin bash + вручную отредактированный terminfo (без него в Solaris, например, работать было невозможно).
                                        • +1
                                          Хм… странно. Я уже точно не помню, но вроде бы задавал подобный вопрос разработчку. У меня как раз таки стоит опция «Focus to child windows», и при этом я нормально переключаюсь между вкладками по Win+{number}.
                                        • +1
                                          UPD: извините, промазал…

                                          Хм… странно. Я уже точно не помню, но вроде бы задавал подобный вопрос разработчку. У меня как раз таки стоит опция «Focus to child windows», и при этом я нормально переключаюсь между вкладками по Win+{number}.
                                          • +1
                                            А не легче было свалить нафиг с «корпоративного стандарта» к работодателю, который подобной хернёй не стратает и разрешает сотрудникам работать на том, на чём удобно?
                                            • 0
                                              Во-первых я не говорил, что не разрешает. Некоторые инструменты работают только в Windows.

                                              Во-вторых, см. коментарий

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

                                            Самое читаемое