Лучший опыт работы с терминалами для подсистемы Windows для Linux (WSL)?

29

Терминал для Windows Subsystem для Linux (WSL) довольно минимален. Я не очень часто использовал терминал в Windows - я обычно использую Ubuntu или OSX - но я удивлен, что терминал по умолчанию настолько прост.

Возможно ли:

  1. Подключите терминальную программу Windows к WSL или

  2. Запустить терминальную программу Ubuntu из WSL как окно X?

Дэвид Лебауэр
источник

Ответы:

26

Я лично делаю последнее: использую VcXsrv в качестве моего X-сервера в режиме нескольких окон, затем запускаю xfce4-терминал (потому что у gnome-терминала были визуальные проблемы, которые я не пытался научиться исправлять), и внезапно у меня компетентный терминал с поддержкой шрифтов и цветов.

Я обнаружил, что мне нужно добавить их в мой bashrc ...

export DISPLAY="localhost:0"
export TERM=xterm-256color

Сделайте исправление из этого reddit для dbus:

sudo sed -i 's$<listen>.*</listen>$<listen>tcp:host=localhost,port=0</listen>$' /etc/dbus-1/session.conf

Я также установил compiz и использую проект cbwin для запуска программ windows из моей оболочки xfce4-терминала.

Я очень доволен этой установкой и использую NeoVim + множество родных плагинов для Linux, хотя моя «для работы» машина должна быть Windows. :)

Также можно запустить SSH-сервер в Bash-on-Linux-on-Windows и затем подключиться к нему, скажем, из MinTTY, как из Cygwin.

PS: чтобы сделать запуск xfce4-терминала безболезненным и без дополнительного окна cmd bash, я написал программу, которая ничего не делает, кроме запуска процесса bash с аргументами для запуска терминала xfce4 без окна консоли. Я сделал это в C # - в основном использовать аргументы «UseShellExecute» false и «CreateNoWindow» true. Затем я прикрепил это к моей панели задач, и это почти не кажется.

РЕДАКТИРОВАТЬ: ответ с VBScript блестящий. Вот тот же сценарий, но версия JScript ...

WScript.CreateObject("WScript.Shell").run('bash.exe -l -c "DISPLAY=:0.0 xfce4-terminal"', 0, false);
aikeru
источник
1
Выбранный ответ, потому что он всеобъемлющий, и он помог мне найти stackoverflow.com/a/39188790 ; Я понял, что обновление MobaXterm до> 9.0 дало мне приличный терминал для WSL.
Дэвид Лебауэр
Если кому-то интересно, вот ссылка на сообщение Reddit, из которого the "fix from reddit" for dbusбыл снят.
тела
@ Tel спасибо! Я на самом деле не знал, откуда это
взялось,
Если «визуальная проблема, которую вы не хотите исправлять» - это то, что вы не видите часть приглашения каталога или имен файлов, причина в том, что они темно-синие. Они не видны на фиолетовом фоне терминала гномов. Хитрость заключается в том, чтобы переназначить цвет от темно-синего до бирюзового, и тогда он отлично работает.
WinEunuuchs2Unix
22

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

  1. В Windows установите VcXsrv или XMing .
  2. В Bash для Windows, установить терминал: sudo apt-get install xfce4-terminal.
  3. Добавьте export DISPLAY=:0к своему .bashrc. (Добавление этого .profileили .bash_profile не работает для меня ). Это позволит вам начать xfce4-terminalправильно с bash, но это ортогонально команде ниже.
  4. Запустите следующее в ярлыке или в приглашении «Выполнить» (как предложено в комментариях @OhJeez):

    powershell -windowstyle hidden -Command "iex \"bash ~ -c 'DISPLAY=:0 xfce4-terminal'\" "
    

Другие заметки:

  • В ~запуске bashв вашем домашнем каталоге, вы можете удалить его , чтобы начать в любой каталог , используемый .vbsфайл находится, вместо этого. Так, например, удобно это вставить C:\Users\foo.
  • Обратите внимание, что XMing должен быть запущен, чтобы скрипт работал; чтобы запустить его автоматически с Windows, вы можете следовать инструкциям в этой статье .
  • Emacs 24 (входит в Ubuntu 14.04), похоже, не работает с XMing; Я должен был установить более новую версию, как предложено в этом посте .
Эндрю Мао
источник
1
Спасибо за вашу помощь. Когда я запускаю скрипт, кажется, ничего не происходит (сервер Xming работает). Тем не менее, если я открою bash и запустите, xfce4-terminalон работает нормально. Кроме того, если я запускаю bash -l -c xfce4-terminalиз windows cmd, я получаю предупреждение, Gtk-WARNING **: cannot open display:и ничего не происходит. Я в замешательстве, полагая, что эти команды должны вести себя одинаково, какие-либо догадки?
rperryng
@rperryng да - я также пытаюсь заставить однострочник открыть xfce без командной строки, но пока не повезло.
Андрей Мао
1
Лучшее решение для запуска xfce4-терминала с помощью ярлыка. Мерцание есть, но окна не осталось: еще C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -Command "iex \"bash.exe ~ -c 'DISPLAY=:0 xfce4-terminal'\" " одна версия, которая запустит Xming, если она не работает:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -Command "iex '& \"C:\Program Files (x86)\Xming\Xming.exe\" -multiwindow'; iex \"bash.exe ~ -c 'DISPLAY=:0 xfce4-terminal'\" "
OhJeez
@OhJeez, спасибо, что разобрались с тонкостями этой команды.
Андрей Мао
Обходной путь для дисплеев с высоким разрешением. Если у вас дисплей 4k, у вас в терминале будут размытые шрифты. Чтобы это исправить, вам потребуется: 1. Использовать «VcXsrv Windows X Server» вместо Xing sourceforge.net/projects/vcxsrv 2. Запустить xserver в режиме совместимости. Для этого вам понадобится: нажать на ярлык VcXsrv правой кнопкой мыши. Выберите «Свойства». На вкладке «Совместимость» установите флажок «Переопределить поведение масштабирования с высоким DPI ...» и выберите «Приложение» в следующем раскрывающемся списке. 3. Запустите xfce4-терминал и измените настройки шрифта. Изменить шрифт на больший.
kororchik
10

Я создал (и использую) терминал с открытым исходным кодом для подсистемы Windows для Linux (WSL) под названием wsl-терминал , он основан на minttyи wslbridge.

Скриншот

Гор Лю
источник
Будьте осторожны с саморекламой - это может выглядеть как спам. askubuntu.com/help/promotion
2
Самореклама в порядке, если вы признаете это
Дэвид Лебауэр
И ты не признал это.
Муру
5
И, пожалуйста, добавьте некоторые подробности о том, почему wsl-terminalбудет лучше работать с терминалом.
Cynplytholowazy
2
Спасибо за то, что поделился этим. Ваш материал уже работает лучше, чем встроенный терминал - по крайней мере, он может справиться с переносом строк в командной строке немного лучше. CTRL-A для быстрого перехода к началу команды все еще не работает. Я доволен людьми, которые продвигают подобные вещи. Люди должны успокоиться.
EdH
5

При новой установке Ubuntu я только что установил XMing (в Windows), затем (в Ubuntu) xfce4-терминал, и после этого все заработало export DISPLAY=:0.

Чтобы избавиться от консоли Windows по умолчанию, этот сценарий VBS выполняет свою работу:

WScript.CreateObject("WScript.Shell").run "bash -l -c xfce4-terminal", 0, True

(С установленным $ DISPLAY в вашем .profile.)

редактировать: И чтобы сделать сценарий выводимым, создайте ярлык с целью wscript "C:\path\to\thescript.vbs".

n.caillou
источник
VBS, кажется, работает, однако окно терминала открывается и закрывается сразу после. Как я могу держать это работает?
TCB13
3

В Windows:

  • Нажмите на верхний левый угол окна bash.
  • В открывшемся меню выберите «Свойства»
  • Установите параметры, которые вы хотите, как шрифт и т. Д. (Есть даже моно шрифт Ubuntu!)
  • После настройки свойств они будут применены к текущему окну. Чтобы установить их по умолчанию, щелкните в верхнем левом углу окна и выберите по умолчанию.
  • Вы можете нажать Alt + Enter для переключения в полноэкранный режим.

Надеюсь, это поможет.

Мохи
источник
Я хотел бы отметить, что он имеет тот же внешний вид / использование, что и терминал Ubuntu (Gnome), за исключением того, что он добавляет поддержку мыши. т.е. Вы можете щелкнуть заголовки столбцов вhtop
WinEunuuchs2Unix
3

ConEmu прекрасно работает! Просто установите его и запустите новую консоль {bash} . Я добавил cd ~в свой, .bashrcчтобы он по умолчанию начинался в моем домашнем каталоге.

Хорошее объяснение: https://conemu.github.io/en/BashOnWindows.html

Билл Хоаг
источник
2

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

  • особенности
  • Поддерживает Linux и macOS, в Windows WSL, CMD, PowerShell и Cygwin
  • совместимый с xterm
  • Несколько вкладок и панелей, разделенных и выложенных плиткой, как вам нравится
  • Показать изображения в терминале
  • Поддержка Unicode
  • Цвет смайликов
  • Клавиатура «Командная палитра»
  • Настраиваемые привязки клавиш
  • Выбор на основе клавиатуры
  • Интеграция с оболочкой; может изолировать и выводить команду frame. (bash, zsh и fish поддерживаются)
  • Простая загрузка и загрузка с использованием интеграции оболочки
  • Вывод команды можно редактировать на месте. Редактирование нескольких курсоров
  • Предыдущий вывод команды можно использовать как ввод для новых команд
  • Поддерживает темы iTerm2 и TextMate
  • Увеличение текста
nelaaro
источник
Я сейчас использую этот терминал, так как он имеет функции, которые я действительно хочу. простой способ переключения между cmd, powershell, bash, fish и т. д.
nelaaro
1

Поскольку последние обновления для Windows 10 (и WSL), похоже, все работают с использованием "родной" консоли Windows Bash. (И я не говорю об (в) известном обновлении Windows 1809). Это работает даже на версии Enterprise, по крайней мере, для версии 1803 (17134.345).

См. Статью на https://www.hanselman.com/blog/SettingUpAShinyDevelopmentEnvironmentWithinLinuxOnWindows10.aspx

Небольшое предостережение - чтобы действительно использовать консоль bash в Windows, нужно запустить tmux - и все будет работать, как показано Скоттом в его блоге.

Адриан
источник
Это весело! «exec tmux» действительно решает все проблемы с терминалом «bash.exe» в Windows (странные обрезанные строки после изменения размера).
Ив Дорфсман
1

Терминал для более современной эпохи https://eugeny.github.io/terminus/

Terminus - это терминал, в значительной степени вдохновленный Hyper. Тем не менее, он предназначен для людей, которые должны добиться своей цели.

  • Работает на Windows, MacOS и Linux
  • Тематические и цветовые решения
  • Полностью настраиваемые ярлыки
  • Полная поддержка Юникода, включая символы двойной ширины
  • Не душит быстродействующие выходы
  • Правильный опыт работы в Windows в оболочке, включая завершение табуляции (через Clink)
  • Поддержка PowerShell (+ Core), WSL (Bash для Windows), Git-Bash, Cygwin, Cmder и CMD
  • Помнит ваши вкладки
  • Интегрированный SSH клиент и менеджер соединений
nelaaro
источник
1

https://hyper.is/

  • Он основан на электроне, что позволяет легко разрабатывать и расширять с помощью JavaScript.
  • Он не использует консоль Windows по умолчанию в любом случае.
  • Это позволяет вам выбрать вашу оболочку bash, cmd, PowerShell.

    the shell to run when spawning a new session (i.e. /usr/local/bin/fish)
    if left empty, your system's login shell will be used by default
    
    Windows
    - Make sure to use a full path if the binary name doesn't work
    - Remove `--login` in shellArgs
    
    Bash on Windows
    - Example: `C:\\Windows\\System32\\bash.exe`
    
    PowerShell on Windows
    - Example: `C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`
    shell: 'C:\\Windows\\System32\\bash.exe',enter code here
    

Очень хорошие темы и плагины

plugins: [
    //"hyper-dracula"
    //"hyper-solarized-dark"
    "hyper-material-theme"
],

Используя это руководство, я смог получить мой WLS, Bash работает очень хорошо.

nelaaro
источник
Спасибо - выглядит как интересный проект, но не могли бы вы рассказать подробнее о программном обеспечении и о том, как его настроить для WSL?
Дэвид Лебауэр
1
@DavidLeBauer Надеюсь, это поможет.
nelaaro
Гипер супер медленный
Мифрил
1

Сегодня вам предлагается использовать «терминал Windows», который открыт от Microsoft.

Официальную сборку можно получить в Windows Store в середине июня этого года.

Но вы также можете испытать это, используя приведенную ниже предварительную версию. https://github.com/yanglr/WindowsDevTools/blob/master/awosomeTerminal/WindowsTerminal_SelfSigned_x86_x64_arm64.7z

После установки, результаты работы ниже:

pic1

pic2

pic3

pic4

Браво Йенг
источник
0

Расширение ответов aikeru и n.caillou, поскольку ни одно из их решений на VBScript / JScript не сработало сразу для меня.

Call WScript.CreateObject("WScript.Shell").Run("bash.exe -l -c 'DISPLAY=:0.0 xfce4-terminal --working-directory $HOME'", 0, True).

При Callиспользовании скобок в команде run необходимо предварять скрипт , см. Здесь . Также галочки должны были быть наоборот. Более того, дополнительный аргумент для xfce4-терминала запускает терминал в домашней папке пользователя. Извините, если на самом деле работал код JScript, я понятия не имею об этих языках сценариев.

Сохранение в виде файла vbscript.vbs и выполнение из командной строки cmd

wscript vbscript.vbs

затем открывает окно терминала xfce4 (если запущен XMing или похожий) через 2 секунды. Превращение этого в ярлык, как на самом деле предлагают работы n.caillou, и нажатие на ярлык автоматически вызовет новое окно терминала xfce с некоторой задержкой.

Фредерик Хебер
источник