WSL için Güzel ve Kullanılabilir Bir Terminal Emülatörünü Yapılandırma


Son birkaç yıldır iş için günlük sürücüm olarak Mac kullanıyorum. Her ne kadar MacOS’ta sevdiğim özel bir şey olmasa da (aslında sevdiğim çok şey var) yapma gibi), dürüst olmak gerekirse beni ona bağlı tutan terminal ve altta yatan Unix tabanlı işletim sistemiydi. Homebrew ile komut satırı araçları sadece çalış. Python ve Node geliştirme ortamları sadece çalış. Ve iTerm2’yi oh-my-zsh ile kullanmak şimdiye kadar yaşadığım en iyi terminal deneyimi. Çoğu zaman Mac donanımının güvenilir ve yapılandırması kolay bir *Nix işletim sistemine sahip olması için para ödediğimi hissediyorum.

Ancak son zamanlarda Mac ekosisteminden çıkıp Windows 10’u X1 Carbon’umda günlük makinem olarak kullanmaya başlamayı gerçekten istiyordum. Linux için Windows Alt Sistemi (WSL) ile artık Windows 10 makinemde CLI acemiliğim için kullanabileceğim “yerel” bir Ubuntu komut satırına sahip olmak mümkün. Ancak beni engelleyen tek şey güzel bir terminal emülatörünün olmamasıydı (kuşkusuz sığım ve güzel şeyleri severim).

Bu işi kesmeyecekti:

Windows Varsayılanında Bash

Uzun uğraşlardan sonra, Windows’ta yaşayabileceğim en rahat terminal deneyimi olduğunu düşündüğüm şeye ulaştım. Sekmeleri, bölmeleri ve fare modunu destekler ve önyükleme için hoş bir renk şemasına sahiptir:

Sonlandırıcı Windows

Bu yazıda, onu nasıl çalıştırdığımı ve yapılandırdığımı ve denediğim diğer seçeneklerden bazılarını hızlı bir şekilde açıklayacağım.

Gerçekten Windows’ta iTerm2’nin eşdeğerini istedim. WSL’yi (Cygwin’i değil) kullanmak istedim ve en azından ihtiyacım vardı:

  • Güzel renkler ve yazı tipleri
  • Sekmeler (pazarlık edilemez)
  • Kaydırma ve Vim/Tmux için çalışan fare desteği
  • Tmux desteği ve otomatik yeniden boyutlandırma
  • Aklı başında kopyala/yapıştır

Sanırım bulabildiğim her büyük Windows terminal uygulamasını denedim. Her birinin kendine göre dezavantajları vardı ve sonunda pes ettim. Denediklerimden bazıları:

  • Komutan
  • Artıları: Sekme desteği. Taşınabilir. Cmd ve PS ile güzel çalışır
  • Eksileri: Tmux’ta fare desteği yoktu; Windows’u yeniden boyutlandırmak çok eğlenceliydi
  • ConEmu
  • Cmder ile aynı – varsayılan olarak o kadar güzel değil
  • Çok güzel
  • Artıları: Pencereyi yeniden boyutlandırma ve fare harika çalıştı
  • Eksileri: Sekme yok!
  • Naneli
  • Wsltty ile aynı, yalnızca başlangıçta yapılandırmak daha zor
  • Hiper
  • Artıları: Çevrimiçi ekran görüntüleri güzel görünmesini sağladı. Görünüşe göre güzel eklentiler var
  • Eksileri: Fena halde buggy. Hiçbir zaman düzgün çalışamadım. NPM’ye dayalı eklentiler her zaman başarısız oldu
  • Babun
  • Artıları: Kutunun dışında birçok özellik
  • Eksileri: WSL’ye değil Cygwin’e dayalı
  • Xshell
  • Artıları: ??
  • Eksileri: WSL Bash’i desteklemiyordu. Ücretsiz değil
  • MobaXTerm
  • Artıları: Çok fazla. Uzak bağlantıları yönetmek için bu uygulamayı seviyorum (örn. RDP)
  • Eksileri: Yerel mermiler için en iyisi değil. Fare/tmux desteği çalışmıyor

Bana en yakın olanı ve bir süredir kullandığım Cmder’dı:

Komut Çalışması

Maalesef Tmux’u kullanmaya başladığımda sorun olmaya başladı. Fare modunu hiçbir zaman çalıştıramadım (bölmeleri kaydırmak veya seçmek) ve pencereleri yeniden boyutlandırmak sorunluydu. Bunun gibi ekranlarla çok karşılaşacağım:

Komutanı Kırık

Benim için kesmeyeceğim (yine de Windows cmd.exe’yi çalıştırmam gerektiğinde Cmder’ı düzenli olarak kullanıyorum)

Araştırmamda ve birden fazla denememde fark ettiğim şey tam da oradaydı değildi iyi bir Windows terminal emülatörü. Vazgeçmek üzereyken Reddit’te XFCE’nin WSL Bash üzerinde çalışmasını sağlayan birisi hakkında bir yazı gördüm. Bu, başarmak istediğim şey için çok fazlaydı, ancak yazıyı okurken Windows’ta çalışan bir X Sunucum olsaydı, GUI Linux terminal emülatörlerini Windows’ta “yerel olarak” kullanabileceğimi öğrendim/fark ettim! Bu bir sürü olasılığın önünü açtı ve en sevdiğim Linux terminallerinden biri olan Terminatör artık bir olasılıktı!

X Sunucusunun Kurulumu

Bir X Window uygulamasını çalıştırmak için Windows 10 makinemde bir X Sunucusunun kurulu ve çalışır durumda olması gerekiyordu. Araştırmadan sonra en popüler iki seçeneğin şunlar olduğu görüldü:

Daha aktif bir şekilde bakımı yapılıyormuş gibi göründüğü için VcXSrv’yi tercih ettim, ancak ikisini de denedim ve ikisi de aynı şekilde çalışıyor.

Kurulumdan sonra VcXsrv, aşağıdaki komut aracılığıyla sunucuyu çoklu pencere modunda başlatmak için bir masaüstü kısayolu oluşturur:

1
"C:\Program Files\VcXsrv\vcxsrv.exe" :0 -ac -terminate -lesspointer -multiwindow -clipboard -wgl -dpi auto

Bir görev çubuğu simgesi çalıştığını gösterir ve netstat’a bakarak bunu doğrulayabiliriz:

1
2
C:\Windows\system32>netstat -abno|findstr 6000
  TCP    0.0.0.0:6000           0.0.0.0:0              LISTENING       6216

VcXsrv’nin tüm arayüzleri dinlediğini ve özel ağlar için genel bir güvenlik duvarı istisnası talep ettiğini unutmamak önemlidir. AFAIK, onu yalnızca localhost’tan gelen bağlantıları dinlemeye/kabul etmeye zorlamanın bir yolu yok, bu yüzden güvenlik duvarı istisna isteğine izin vermedim ve yalnızca gelen trafiğe izin verecek şekilde özel bir kural yapılandırdım 127.0.0.1

Güvenlik Duvarı Kuralı

Terminatörü Yapılandırma

VcXsrv yüklendikten ve erişime izin verecek şekilde yapılandırıldıktan sonra 127.0.0.1bir sonraki adım Terminator’ı WSL Bash’e kurmaktı:

1
$ sudo apt-get install terminator

Sonlandırıcıyı kullanmak istemediysem, Gnome Terminali (Terminatörün temelini oluşturduğu), Urxvt veya xterm dahil olmak üzere başka herhangi bir terminal emülatörünün çalışması gerekir.

Kurulduktan sonra geriye kalan tek şey, bağlanılacak X Display’i belirterek onu başlatmayı denemekti (:0)

1
$ DISPLAY=:0 terminator &

Ve güzel bir Terminatör penceresi açıldı 🙂

Terminatör Başlatılıyor

Zsh’yi yükleme

Yaptığım bir sonraki adım Zsh’yi oh-my-zsh ile kurmaktı. Kurulum basittir:

1
2
sudo apt-get install curl wget git zsh
curl -L https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh | bash

“Ys” temasını ayarladım .zshrc

Bash’i WSL’de kullanmanın tek “anlaşılan” yanı, her zaman Zsh yerine Bash’i çalıştırmasıdır. Bunu aşmak için bunu yazımın sonuna ekliyorum .bashrc hangisini başlatacak zsh bunun yerine başlatıldığında:

1
2
3
if [ -t 1 ]; then
  exec zsh
fi

Terminatör Renk Şeması

Yapmayı seçtiğim bir sonraki şey, varsayılan Terminatör renk şemasını Solarized Dark olarak değiştirmekti. Bu IMO’yu yapmanın en kolay yolu harika düğüm paketi base16-builder’ı kullanmaktır

1
2
3
4
sudo apt-get install nodejs-legacy
sudo npm install --global base16-builder
mkdir -p .config/terminator
base16-builder -s solarized -t terminator -b dark > .config/terminator/config

Dircolors

Şu ana kadar iyi görünüyordu ama direkt renkler hâlâ berbattı:

Kötü renkler

Github’da Solarized dircolors buldum ve bunları şu adrese indirdim: .dir_colors

1
2
wget https://raw.githubusercontent.com/seebi/dircolors-solarized/master/dircolors.256dark
mv dircolors.256dark .dir_colors

Sonra son olarak şunu ekledim .zshrc Başlangıçta Solarized dircolors’u değerlendirmek için:

1
2
3
if [ -f ~/.dir_colors ]; then
  eval `dircolors ~/.dir_colors`
fi

Sonunda beğenime yetecek kadar güzel bir terminale sahip oldum. Hala iTerm2 yok, ancak IMO’ya oldukça yakın

Son engel, önce bir Bash penceresi açıp ardından yazmaya gerek kalmadan Terminatör’ü doğrudan başlatmanın bir yolunu bulmaktı. DISPLAY=:0 terminator &

Komut satırından bash’ı şununla başlatabilirim: -c parametre ve işe yarayacaktır:

1
C:\Users\ronnie>bash -c -l "DISPLAY=:0 terminator &"

Ancak bu yine de bir komut penceresi açmamı gerektiriyordu. StackOverflow üzerinde birçok deneme yanılma ve araştırma yaptıktan sonra, VBS’deki WShell Nesnesini kullanarak gizli bir komut penceresinin nasıl başlatılacağını buldum. Kullandığım son komut dosyası burada:

Bu komut dosyasıyla, bir Masaüstü kısayolu oluşturabildim. wscript.exe ve aşağıdaki komutla çalıştırın:

1
C:\Windows\System32\wscript.exe C:\Users\ronnie\startTerminator.vbs

Sonlandırıcı Kısayolu

Son adım, kısayol için güzel bir Terminatör Simgesi dosyası bulmak ve onu hızlı başlatmak için görev çubuğuma eklemekti.

Son bir not “Başlangıç” seçeneğidir. Bu yol Windows tarafından “bilinmediği” için Termiator’ın Linux ana dizinimde bu yöntemle başlatılması imkansızdır. Bunu aşmak için şunu ekledim .zshrc bu yüzden başlangıçta ana dizinime CD’ler:

1
2
3
if [ -t 1 ]; then
  cd ~
fi

Sahte, ama işe yarıyor.

Bir süredir WSL için Terminator kullanıyorum ve onu seviyorum. Şu ana kadar Windows’ta edinebildiğim en iyi terminal deneyimi. VcXsrv’yi çalıştırdığım sürece onu başlatma konusunda hiçbir sorun yaşamadım ve çok sorunsuz çalışıyor. Terminatör oldukça yapılandırılabilir ve bazı klavye kısayollarını beğenime göre yapılandırıp değiştirdim. Genel olarak bölmelere/bölmelere/sekmelere sahip olmayı seviyorum ve WSL aracılığıyla birden fazla kutuya SSH uyguladığımda bu harika. Artık iş akışım genellikle Windows’umda VS Code çalıştırıyor ve birden fazla Terminatör bölmesi açık /mnt/c/projects/whatever ve laboratuvarımda SSH’ye dahil olmak. Onu seviyorum.

Sonlandırıcı Windows

Umarım bu birine yardımcı olur! Farklı/daha iyi bir çözümünüz varsa bana bildirin!

-ropnop




Source link