рд╣рдо рдХреНрдпрд╛ рд▓рд┐рдЦреЗрдВрдЧреЗ
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ PHP рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рд▓рд┐рдЦрд╛ рдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдкрд░ рдХреБрдЫ рдФрд░ рдЧрдВрднреАрд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рд╡реЗрдм рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ ..? рдЕрдЬрдЧрд░ ..? рд░реВрдмреА ..? рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ ..? рдирд╣реАрдВ! рдЪреВрдВрдХрд┐ рдЧреЛ 1 рдЖрдпрд╛ рд╣реИ, рдЪрд▓реЛ рдЙрд╕ рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ;)ред рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдЦреБрдж рдХреЛ рди рджреЛрд╣рд░рд╛рдКрдВ рдФрд░ рдпрд╣рд╛рдВ рдкреВрд░рд╛ рдХреЛрдб рди рд▓рд┐рдЦреВрдВред рдореИрдВ рдХреЗрд╡рд▓ рджрд┐рд▓рдЪрд╕реНрдк, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЯреБрдХрдбрд╝реЗ рджреЗрдЧрд╛ред
рдбреЗрдореЛ
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдХреЛ
рджреЗрдЦрдиреЗ рдХреЗ рдЕрд╡рд╕рд░ рдХреЗ рд▓рд┐рдП
Aleks_ja рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж (рдЖрдкрдХреЛ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 11 рдпрд╛ рдирд╡реАрдирддрдо рдХреНрд░реЛрдо)ред рдкрд╣рд▓реА рдмрд╛рд░ рдпрд╣ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдбреЗрдореЙрди рдХреЛ 100 рдПрдордПрд╕ рдореЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ - рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рд╡реЗрдм рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд▓рд┐рдП рд╕реЛрд░реНрд╕ рдХреЛрдб
рдЬреАрдердм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдбреЗрдореЙрди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (
go build
) - рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдЙрдкрд╛рдп рд╣реИ рдЬреЛ "рджрд░рд╛рд░" рд╣реЛрд╕реНрдЯрд░реНрд╕ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ;)ред
рд╕рд╛рдордЧреНрд░реА
рддреЛ, рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рд╕реНрдерд╛рдкрд┐рдд рд╕рдВрдХрд▓рдХ 1
- Websocket рдкреБрд╕реНрддрдХрд╛рд▓рдп (
go get code.google.com/p/go.net/websocket
Googlep go get code.google.com/p/go.net/websocket
go.net go get code.google.com/p/go.net/websocket
websocket) - рдирд╡реАрдирддрдо Websocket рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ (рдЙрджрд╛ред рдирд╡реАрдирддрдо Firefox рдФрд░ Chrome)
- PHP рдХреЗ рд╕рд╛рде рдХреЛрдИ рднреА рд╡реЗрдм рд╕рд░реНрд╡рд░ (рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбреЗрдореЙрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)
рдПрдХ рд╡реЗрдм рджрд╛рдирд╡ рд╕реЙрдХреЗрдЯ рд▓реЗрдЦрди
рд╣рдорд╛рд░реЗ рдбреЗрдореЙрди рдореЗрдВ, рдПрдХ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рд╕рд░реНрд╡рд░ рдФрд░ рдПрдХ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдПрдореНрдпреВрд▓реЗрдЯрд░ рд╕рдВрдпреБрдХреНрдд рд╣реЛрдЧрд╛ред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЧреЛ рдореЗрдВ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдореВрд▓ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рдпрд╣ рднрд╛рд╖рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реА рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕реА рдореЗрдВ рдЗрд╕реА рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАрдзреЗ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред
рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
package main import ( "code.google.com/p/go.net/websocket" "http" "log" )
рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рд╣рдо forkpty () рдФрд░ ioctl () рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд▓рд┐рдЦреЗрдВрдЧреЗ (ioctl () рдореЗрдВ рд╣рдо рдЯрд░реНрдорд┐рдирд▓ рдХреЗ "рд╡рд┐рдВрдбреЛ" рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗ): рдЬрд╛рдУ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ C рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ pp_t рдФрд░ int рдПрдХ рд╣реА рдмрд╛рдд рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕реА рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рдЪрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ред
package main import "C"
рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
func PtyServer(ws *websocket.Conn) { cols, rows := 80, 24
рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдФрд░ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдмрдВрдзрд┐рдд рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ (рдкреЛрдЗрдЯреНрдиреЛ) рд╕реЗ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рднреЗрдЬрдирд╛, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡реЗрдм рд╕реЙрдХреЗрдЯ рд╕реЗ рдЗрдирдкреБрдЯ рдкреЙрдЗрдЯреНрдиреЛ рддрдХ рдЗрдирдкреБрдЯ рднреЗрдЬрдирд╛ рд╕рд░рд▓ рд╣реИред рд╕рдорд╕реНрдпрд╛ рддрдм рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬрдм рдПрдХ рдЕрдкреВрд░реНрдг рдпреВрдЯреАрдПрдл -8 рдЕрдиреБрдХреНрд░рдо рд╣рдореЗрдВ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдЖрддрд╛ рд╣реИред рд╣рдо рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдХреЗрд╡рд▓ рдмреНрд▓реЙрдХреЛрдВ (рдХрд╣реЛ, 2 KB) рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмреНрд▓реЙрдХ рдХрд╛ рдЕрдВрдд UTF-8 рд╡рд░реНрдг рдХреЛ 2 рднрд╛рдЧреЛрдВ рдореЗрдВ "рдХрд╛рдЯ" рд╕рдХрддрд╛ рд╣реИ - рдпрд╣ "рдЯреНрд░рд┐рдо" рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдЧрд╛ред рдпрд╣рд╛рдБ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдХреЛрдб рд╣реИ рдЬреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ:
for end = buflen - 1; end >= 0; end-- {
рд╣рдореЗрдВ рдмрдлрд╝рд░ (buf) рдХреЗ рдЕрдВрдд рдореЗрдВ рдмрд╛рдЗрдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ UTF-8 рдХреИрд░реЗрдХреНрдЯрд░ (рдЧреЛ рд╢рдмреНрджрд╛рд╡рд▓реА - рд░рди) рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХреИрд░реЗрдХреНрдЯрд░ рдмрд░рдХрд░рд╛рд░ рд╣реИред рдпрджрд┐ рдЕрдВрддрд┐рдо рд╡рд░реНрдг рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рд╣рдо рдмрдлрд░ рдХреЗ "рдЕрдВрдд" рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдо рдмрдлрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░ рджреЗрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХреЗрд╡рд▓ рдкреВрд░реЗ рдкрд╛рддреНрд░ рд╣реА рд░рд╣реЗрдВред
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JSLinux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд▓реЗрдЦрдХ рдореЗрд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдХреЛрдб рдХреЗ рд╕рдВрд╢реЛрдзрди рдФрд░ рд╡рд┐рддрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдЗрдП Selectel рд╕реЗ рдореЗрд░реЗ рджреЛрд╕реНрддреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреА рдЧрдИ
рд╕реЗрд▓реЗрдХреНрдЯ / pyte рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реЗ рд▓реЛ ... рдПрдХ рдорд┐рдирдЯ рд░реБрдХреЛ, рдпрд╣ рдЕрдЬрдЧрд░ рд╣реИ :(!) рдПрдХ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреЗрдХрд╛рд░ рд╣реИ, рдЪрд▓реЛ!
рд╣рдо рдЗрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВрдЧреЗ :)! рдЕрдЬрдЧрд░ рд╕реЗ рдмрдВрджрд░рдЧрд╛рд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЕрдЬрдЧрд░ рдХрд╛ рд╡рд┐рд╢реЗрд╖ рдкрд╛рд░рдЦреА рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдорд┐рдбрдирд╛рдЗрдЯ рдХрдорд╛рдВрдбрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрднреА рднреА JSLinux рдХреЗ рд▓реЗрдЦрдХ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛
рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдореИрдВрдиреЗ рдиреАрдЪреЗ рдЗрдирдкреБрдЯ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреБрдЫ рдкрд╛рда рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рдЬреЛрдбрд╝реА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рд╕рд╡рд░реНрдб) рдФрд░ F1 - F12 рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдкрд┐рдВрдЧ рдФрд░ рд╕рд╛рде рд╣реА Alt + (рдмрд╛рдПрдБ / рджрд╛рдПрдБ рддреАрд░) рдХреЗ рд▓рд┐рдП рдореИрдкрд┐рдВрдЧ рдХреЛ рдЬреЛрдбрд╝рд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдПрдл-рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рд╡рд░реНрдгреЛрдВ рдХрд╛ рдорд╛рди рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ $ TERM рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ vt100 рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ VT100 рдореЗрдВ рдХреАрдмреЛрд░реНрдб рдкрд░ рдирд╣реАрдВ рдереЗ :)ред рдЪреВрдБрдХрд┐ pyte рдХрд╛ рдкреНрд░рдпреЛрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, $ TERM рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ linux рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд▓рд┐рдП рдЗрди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рд╣рдордиреЗ "рдСрди рдбрд┐рдорд╛рдВрдб" рджрд╛рдирд╡ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛
рдореИрдВрдиреЗ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдбреЗрдореЙрди рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЕрдВрддрд┐рдо рдХрдиреЗрдХреНрд╢рди рдХреЗ рдПрдХ рдорд┐рдирдЯ рдмрд╛рдж рдмрд╛рд╣рд░ рдЖрдП, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡реЗрдм рдЯрд░реНрдорд┐рдирд▓ рд╕реЙрдХреЗрдЯ рдбреЗрдорди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╣рдо рдкреГрд╖реНрда рдХреЛ рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд╕рд╛рде рдЦреЛрд▓рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП PHP рдХреЛрдб рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
<?php $PORT = 13923;
рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐
exec
рдХреНрдпрд╛
exec
, рддреЛ рдореИрдВ
exec
: рдпрд╣ рдХрд┐рд╕реА рднреА рдпреВрдирд┐рдХреНрд╕ рд╢реЗрд▓ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдорд╛рдВрдб рд╣реИ рдЬреЛ рд╢реЗрд▓ рдХреЛ рд╕реНрд╡рдпрдВ рдХреЛ рддрдерд╛рдХрдерд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рд╕реБрдкрд░рдлреНрд▓реБрдЕрд╕" рдкреНрд░рдХреНрд░рд┐рдпрд╛
sh -c ./ws ...
рдЬрд┐рди рдкрд▓реЛрдВ рдХреА рдореИрдВрдиреЗ рдмрд╛рдд рдирд╣реАрдВ рдХреА
рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХреА:
- рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдВрдЪрд╛рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рдВрдбреЛ рдЖрдХрд╛рд░ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдерд╛
, рд▓реЗрдХрд┐рди рд░реВрд╕реА рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдЧ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ - рд╡реЗрдм рдбреЗрдорди рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░реЛрдЯреЗрдХреНрдЯреЗрдб рд╣реИ, рдЬреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рд╡рд╛рдВрдЫрд┐рдд рдЯрд░реНрдорд┐рдирд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ bashrc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
- рдЪреВрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдИ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдмрд╛рдЗрдЯреНрд╕ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдбреЗрдореЙрди рд╕рд░реНрд╡рд░ рдХреЛ sshd (рдпрд╛рдиреА CPU рд▓реЛрдб рд╢реВрдиреНрдп рдХреЗ рдХрд░реАрдм рд╣реИ) рдХреЗ рдмрд░рд╛рдмрд░ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ
- рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкрд╛рдЗрддреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрд╕рд╛рдзрд╛рд░рдг рд░реВрдк рд╕реЗ рддреЗрдЬ рд╣реИ: рдорд┐рдбрдирд╛рдЗрдЯ рдХрдорд╛рдВрдбрд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдХреЛрдИ рджреЗрд░реА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреА рд╣реИ, рдереНрд░реВрдкреБрдЯ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдкрд╛рда рдХреА рдХрдИ рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ
- рдЬрдм рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рддреНрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ
- рдПрдХ рдбреЗрдорди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
- ubuntu рд╕реЗ <рдСрдбрд┐рдпреЛ> рдЯреИрдЧ рдФрд░ рдзреНрд╡рдирд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг, рдЯрд░реНрдорд┐рдирд▓ "рдмреАрдк" рдХрд░ рд╕рдХрддрд╛ рд╣реИ :)
рдЧрд┐рдердм рдкрд░рд┐рдпреЛрдЬрдирд╛
рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЧреАрдердм рдХреЗ рд▓рд┐рдВрдХ рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛:
github.com/YuriyNasretdinov/WebTerm - рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рд▓реЗрдЦ рдореЗрдВ рдмрд╛рдд рдХреА рдереА
github.com/YuriyNasretdinov/pyte - рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдЪрдпрдирдХрд░реНрддрд╛ / pyte рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ)