Terminal emülatörleri
Ana taraf, terminale giden çizgiyi (TX / RX tel çifti) değiştirir.
Terminal , tellerden birinde aldığı karakterleri görüntüler (bunlardan bazıları kontrol karakterleridir ve imleci hareket ettirmek, rengini değiştirmek ... gibi şeyler yapmak) ve başka bir kabloya yazdığınız tuşlara karşılık gelen karakterleri gönderir.
Xterm gibi terminal emülatörleri , kablolara karakter göndermek ve almak yerine, dosya tanımlayıcılarındaki karakterleri ana tarafa okur ve yazar. Köle terminalini doğurduklarında ve kabuğunuzu bunun üzerine başlattıklarında, artık ona dokunmuyorlar. Tel çiftinin taklit edilmesine ek olarak, xterm, çizgi disiplini özelliklerinin bazılarını bu dosya tanıtıcısı aracılığıyla ana tarafa da değiştirebilir. Örneğin, boyut niteliklerini güncelleyebilirler; böylece değiştirilen bir boyutta onları bilgilendirmek için köle pty ile etkileşime giren uygulamalara bir SIGWINCH gönderilir.
Bunun dışında terminal / terminal emülatöründe çok az istihbarat var .
Bir uçbirim aygıtına yazdığınız şey (küçük köle gibi) orada gösterilmek istediğiniz şey, ondan okuduğunuz şey orada yazdığınız şeydir, bu yüzden terminal emülatörünün bunu okuyup yazması bir anlam ifade etmemektedir. . Diğer ucunda olanlar onlar.
Tty çizgi disiplini
Bir çok zeka olduğunu tty hat disiplin . Çizgi disiplini, bu aygıtla çizgi / tel (bir pty'nin ana tarafı) arasında oturan bir seri / pty aygıtının üzerine itilmiş (sürücüde, çekirdekte bulunan) bir yazılım modülüdür.
Bir seri hattın diğer ucunda bir terminali olabilir, fakat aynı zamanda bir fare veya ağ için başka bir bilgisayarı olabilir. Örneğin bir seri aygıtın (ya da pty aygıtının) bir ağ arabirimine erişmek için bir SLIP hattı disiplini ekleyebilirsiniz ya da bir tty hat disiplininiz olabilir. Tty satırı disiplini, en azından seri ve pty aygıtları için Linux'taki varsayılan çizgi disiplinidir. Linux'ta çizgi disiplinini ile değiştirebilirsiniz ldattach.
Tty line disiplinini devre dışı bırakmanın etkisini yayınlayarak görebilirsiniz stty raw -echo(bash isteminin ya vida terminali ihtiyaç duydukları tam modda ayarlamak gibi diğer etkileşimli uygulamaların , bu nedenle catdeneyimlemek gibi aptal bir uygulama kullanmak istediğinize dikkat edin). Daha sonra, slave terminal cihazına yazılan her şey xterm'in okunmasını hemen ana tarafa getirir ve xterm tarafından master tarafa yazılan her karakter slave cihazından okumak için hemen kullanılabilir.
Çizgi disiplini, terminal cihazı dahili çizgi editörünün uygulandığı yerdir . Örneğin, stty icanon echo(varsayılan gibi) ayazdığınızda, xterm amaster'a yazar , daha sonra çizgi disiplini tekrar yankılanır ( görüntüleme aiçin okumaya uygun hale getirir xterm), ancak ikincil kısımda okumak için uygun bir şey yapmaz . Eğer geri tuşuna yazarsanız Sonra, xterm bir gönderir ^?veya ^H(bu kadar karakteri, çizgi disiplin ^?veya ^Htekabül erasehat disiplin ayarı) ana a geri gönderir ^H, spaceve ^Hiçin xtermsilmekaaz önce ekranını yazdınız ve hala köle tarafından okunan uygulamaya hiçbir şey göndermiyor, daha aönce yazdıklarınızı kaldırmak için iç satır düzenleyicisi arabelleğini güncelleştiriyor .
Enter tuşuna Sonra, xterm gönderir ^Mçizgi disiplin bir ^ J (LF) için girişe dönüştüren (CR), ve bir uygulama üzerinde okuma (köle tarafında okumak için şimdiye kadar girdiğiniz gönderir /dev/pts/xne alacak LF'yi yazdınız, ancak asildiğinizden beri değil), ana tarafta iken imleci bir sonraki satıra ve ekranın başına götürmek için bir CR ve LF gönderir.
Hat disiplini, sinyalin ana tarafta bir karakter aldığında terminalin ön plan işlem grubuna gönderilmesindenSIGINT de sorumludur ^C.
Pek çok etkileşimli terminal uygulaması , bu disiplinin özelliklerinin çoğunu, kendileri uygulamak için devre dışı bırakır . Ancak, her durumda, terminalin ( xterm) bununla çok az ilgisi olduğuna dikkat edin (gösterilmesi söylenenleri gösterme hariç).
Ve işlem başına ve terminal cihazı başına sadece bir oturum olabilir. Bir oturum, kendisine bağlı bir kontrol terminaline sahip olabilir, ancak bunu yapmak zorunda değildir (tüm oturumlar bir terminal açmadan başlayana kadar başlar). xterm, kabuğunuzu çalıştırmaya zorladığı süreçte tipik olarak yeni bir oturum oluşturur (ve bu nedenle varsa başlattığınız terminalden ayrılır xterm), /dev/pts/xbu terminal cihazını yeni oturuma bağlayarak açtığı yeni olanı açar. Daha sonra bu süreçte kabuğunuzu çalıştırır, böylece kabuğunuz oturum lideri olur. Kabuk veya o oturumdaki herhangi bir etkileşimli kabuk tipik olarak işlem gruplarıyla hokkabazlık yapacak tcsetpgrp()ve bu terminal için ön ve arka plan işlerini ayarlayacaktır.
Hangi bilgilerin tty disipline sahip (seri veya pty) bir terminal cihazı tarafından saklandığına gelince , genellikle sttykomutun gösterdiği ve değiştirdiği şey budur. Tüm disiplin yapılandırması: terminal ekranı boyutu, yerel, giriş çıkış bayrakları, özel karakter ayarları (^ C, ^ Z ... gibi), giriş ve çıkış hızı (pty'ler için geçerli değildir). Bu , Linux haritasında / ioctls öğesine ve / için ekran boyutuna tcgetattr()/ tcsetattr()işlevlerine karşılık gelir . Geçerli ön plan işlem grubunun terminal cihazında ( / , ioctls) depolanan başka bir bilgi veya mevcut giriş veya çıkış tamponu olduğunu iddia edebilirsiniz .TCGETSTCSETSTIOCGWINSZTIOCSWINSZtcsetpgrp()tcgetpgrp()TIOC{G,S}PGRP
Terminal cihazda depolanan ekran boyutu bilgilerinin gerçeği yansıtmayabileceğini unutmayın. Terminal emülatörü tipik olarak, penceresi yeniden boyutlandırıldığında (ana boyuttaki aynı ioctl aracılığıyla) penceresi yeniden boyutlandırıldığında ayarlayacaktır, ancak bir uygulama köle tarafındaki ioctl'i çağırdığında veya yeniden boyutlandırma iletilmediğinde senkronizasyondan çıkabilecektir (durumda örneğin ihmal sshdederse başka bir küçük ürüne işaret eden bir ssh bağlantısı . Bazı terminaller de kaçış dizileri aracılığıyla boyutlarını sorgulayabilir, böylece bir uygulama bu şekilde sorgulayabilir ve çizgi disiplinini bu bilgilerle güncelleyebilir.sshSIGWINCH
Daha fazla ayrıntı için, örneğin Debian'daki termiosve tty_ioctlman sayfalarına göz atabilirsiniz .
Diğer hat disiplinleriyle oynamak için:
Bir fareye sözde-terminal taklit:
socat pty,link=mouse fifo:fifo
sudo inputattach -msc mouse # sets the MOUSE line discipline and specifies protocol
xinput list # see the new mouse there
exec 3<> fifo
printf '\207\12\0' >&3 # moves the cursor 10 pixels to the right
Yukarıda, çukurun ana tarafı, socat tarafından adlandırılmış bir pipe ( fifo) üzerine sonlandırılır . Bu fifoyu, fare sistemleri protokolünde, 0x87 0x0a 0x00 yazan bir işleme (kabuk) bağlarız no button pressed, delta(x,y) = (10,0). (Terminal cihazından bir uygulama tarafından (potansiyel olarak dönüştürülmüş) okunmamalıdır Burada, (kabuk) bir terminal, ama fare taklit olmamak üzere, biz göndermek 3 bayt olan mouse, yukarıda yapılan bir sembolik olan socatbazı /dev/pts/xcihaz) , ancak bir fare giriş olayı olarak yorumlanmalıdır.
Bir SLIP arayüzü oluşturun:
# on hostA
socat tcp-listen:12345,reuseaddr pty,link=interface
# after connection from hostB:
sudo ldattach SLIP interface
ifconfig -a # see the new interface there
sudo ifconfig sl0 192.168.123.1/24
# on hostB
socat -v -x pty,link=interface tcp:hostA:12345
sudo ldattach SLIP interface
sudo ifconfig sl0 192.168.123.2/24
ping 192.168.123.1 # see the packets on socat output
Yukarıda, seri kablo socathostA ve hostB arasında bir TCP soketi olarak taklit edilir . SLIP hat disiplini, bu sanal hat üzerinden alınıp verilen baytları sl0arayüzde teslimat için SLIP kapsüllenmiş IP paketleri olarak yorumlar .