рд╢реБрдн рджреЛрдкрд╣рд░, рджреЛрд╕реНрддреЛрдВ, рдореИрдВ рддреБрд░рдВрдд рдмреЛрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдореЗрд░реЗ рджреЛрд╕реНрдд рдХрд╛ рдпрд╣ рд▓реЗрдЦ, рдЬреЛ рдЗрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЧрд▓рддреА рд╕реЗ рдЗрд╕реЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рднреЗрдЬ рджрд┐рдпрд╛ рдЬреЛ рдЕрднреА рддрдХ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛, рдФрд░ рдЕрдм рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдирд╣реАрдВ рд░рдЦ рд╕рдХрд╛, рдореБрдЭреЗ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рд▓реЗрдЦ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдм рдХрд╛рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдзреБрдВрдзрд▓рд╛ рд╣реИ !рдЯреАрдо рдХрд╛ рднрд╛рдЧреНрдп 2 рдЦреЗрд▓рдирд╛ рдФрд░ рд╕рдВрдЧреАрдд рд╕реБрдирдирд╛, рдореИрдВ рдХреНрд▓реЗрдореЗрдВрдЯрд╛рдЗрди рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдЖрдпрддрди рдХреЛ рдХреБрд▓ рдЖрдпрддрди рд╕реЗ рдЕрд▓рдЧ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдкрд░ рдмрд╣реБрдд рдирд╛рд░рд╛рдЬ рдерд╛ред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдХреАрдмреЛрд░реНрдб рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд╛рдмрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВ, рд╕рднреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рдореЗрдВ рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рд╕рдорд╛рдзрд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ http рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЬрд╛рд╡рд╛ рдФрд░ рдкрд╛рдпрдерди рдХреА рдЕрдЬреНрдЮрд╛рдирддрд╛ рдореЗрдВ рдХреБрдЫ рднреА рдмрд╛рдзрд╛ рдирд╣реАрдВ рдЖрдИ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рдореЗрд░реА рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рдкрд░ рдПрдХреНрд╕ 3 рд╡рд┐рднрд╛рдЬрди рд╣реИред
рдкрд╣рд▓реЗ, рдореБрдЭреЗ рд╕рдорд░реНрдерд┐рдд рдФрд░ рдореБрдлреНрдд рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЙрдмрдВрдЯреВ рдореЗрдВ, рдЖрдк xmodmap рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдФрд░ /usr/library/X11/*keys.h рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реЗ рд▓рд┐рдП, рдпреЗ рдирд┐рдХрд▓реЗ:
#define XF86XK_Launch0 0x1008FF40 тАж #define XF86XK_LaunchF 0x1008FF4F
рд╣рдореЗрдВ рдЗрди рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЗ рдХреЛрдб рдЪрд╛рд╣рд┐рдП (рдореИрдВрдиреЗ рдХреЗрд╡рд▓ 2 рдХреЛ рдЪреБрдирд╛); рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк "XF86XK_Launch1" рдкрджрдирд╛рдо рдХреЗ рд╕рд╛рде рдХреБрдВрдЬреА рдХреЛрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ "xmodmap -pk | preg 'Launch1' рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░
", рд╣рдореЗрдВ рдХреЛрдб" 156 "рдорд┐рд▓реЗрдЧрд╛ (рдореИрдВрдиреЗ 156 рдФрд░ 157 рдХреЛ рдЪреБрдирд╛ рд╣реИ)ред
рд╕рд░реНрд╡рд░
рд╕рдмрд╕реЗ рд╡рд┐рдбрдВрдмрдирд╛рдкреВрд░реНрдг рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВ http рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрд░рд┐рдЪрд┐рдд рдкрд╛рдпрдерди 3 рдореЗрдВ рдПрдХ tcp рд╕рд░реНрд╡рд░ рд▓рд┐рдЦреВрдВрдЧрд╛ред рдЗрд╕ рдЪрд░рдг рдиреЗ рдХреЛрдИ рдореБрд╢реНрдХрд┐рд▓ рдкреИрджрд╛ рдирд╣реАрдВ рдХреА, рдХреНрдпреЛрдВрдХрд┐ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ "tcp рд╕рд░реНрд╡рд░," рдХреНрд▓рд╛рд╕ "BaseHTTPRequestHandler" рдФрд░ "SimpleHTTPRequestHandler" рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдЖрдзрд╛рд░ рд╣реИред рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "pyatspi.registry" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдареАрдХ рд╣реИ, рдЗрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╣реБрдЖ; рдПрдореБрд▓реЗрдЯрд░ рдореЗрдВ, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдПрдХ рднреМрддрд┐рдХ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдиреЗ рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдлрд┐рд░ рд╕реЗ рджрд┐рд▓рд╛рдпрд╛ рдХрд┐ рджреБрдирд┐рдпрд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдзреАрд░реЗ-рдзреАрд░реЗ рдореБрдЭреЗ рдпрд╣ рд▓рдЧрдиреЗ рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧреБрд░реБ рдФрд░ рд╕рдордп рдХрд╛ рд╕реНрд╡рд╛рдореА рд╣реВрдВред рдЕрдиреНрдпрдерд╛, рдореИрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХреЛ рдХреИрд╕реЗ рдХрдо рдХрд░ рдкрд╛рдКрдВрдЧрд╛? рдореИрдВ рдЗрд╕ рдорд┐рд╕рд╛рд▓ рдкрд░ рдЖрдкрдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред
import pyatspi, time import http.server import socketserver class HttpKeyboard(http.server.BaseHTTPRequestHandler): server_version = "SimpleHTTP/0.1" def do_GET(self): """Serve a GET request.""" reg = pyatspi.Registry.generateKeyboardEvent path = self.path.split('/') if len(path) == 3: ms = int(round(time.time() * 1000)) - int(path[2]) reg(int(path[1]), None, pyatspi.KEY_PRESSRELEASE) print ("key %s - %s ms" % (path[1], ms)) f = self.send_head() def send_head(self): self.send_response(200) self.send_header("Content-type", "text/html; charset=utf-8") self.send_header("Content-Length", 0) self.end_headers() httpd = socketserver.TCPServer(("", 8000), HttpKeyboard) print("serving at port", 8000) if __name__ == "__main__": httpd.serve_forever()
рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ -
рд╕рд┐рдВрдкрд▓рдПрдЪрдЯреАрдЯреАрдкреАрдЖрд░рд╕реНрдЯреЗрд╕реНрдЯрд╣реИрдВрдбрд▓рд░ рдХреНрд▓рд╛рд╕, рдЬреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп
рдмрд╣реБрдд рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдЧрд╛:
key 156 - 527 ms
// ( )
192.168.0.101 - - [07/Jan/2013 19:57:09] "GET /156/1357574229198 HTTP/1.1" 200
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ:
156 - рдХреБрдВрдЬреА рдХреЛрдб
1357574229198 - рджреЛрд╣рд░реЗ рдХреАрдмреЛрд░реНрдб рдкрд░ рдмрдЯрди рджрдмрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛
рдореИрдВрдиреЗ http рд╣реЗрдбрд░ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рддреИрдпрд╛рд░ рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХрд╛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
Android рдРрдк
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ Android рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ Http рдХреНрд▓рд╛рдЗрдВрдЯ рдЪреБрдирд╛ред рдбрд┐рд╡рд╛рдЗрд╕ рдПрдХ рд╣реА рд╡рд╛рдИрдлрд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдЖрдИрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореБрдЭреЗ рдЗрд╕ рдЪрд░рдг рдореЗрдВ рд╢рддреНрд░реБрддрд╛рдкреВрд░реНрдг рд╕рд┐рд╕реНрдЯрдо.currentTimeMillis () рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХреБрдЫ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдореИрдВ рдЕрдВрдд рдореЗрдВ рдкреВрд░реЗ рддрд░рд╣ рд╕реЗ рдлреЗрдВрдХ рджреВрдВрдЧрд╛, рдФрд░ рдлрд┐рд░ рдореИрдВ рдЕрдиреБрд░реЛрдз рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред
рдЬрд╛рд╡рд╛ public void KeyHttp(String key) { AsyncHttpClient client = new AsyncHttpClient(); EditText edit = (EditText) findViewById(R.id.editText1); client.get("http://"+edit.getText()+"/"+key+"/"+System.currentTimeMillis(), new AsyncHttpResponseHandler() { @Override public void onSuccess(String response) { this.log("success result"); } @Override public void onStart() { this.log("starting"); } @Override public void onFailure(Throwable error) { this.log("failure result"); } public void log(String text) { TextView view = (TextView) findViewById(R.id.textView1); view.setText(text); } }); }
рдкрд░рд┐рдгрд╛рдо
рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред
рдареАрдХ рд╣реИ, рдЕрдм рдЯреАрдо рдлреЛрд░реНрдЯреНрд░реЗрд╕ 2 рдореЗрдВ рдПрдХ рд╡рдВрд╢реАрдп рдорд╢реАрди рдкрд░ рд╡рдВрд╢ рдХреА рд▓рдпрдмрджреНрдз рд╡рд┐рджреНрд░реЛрд╣реА рд▓рдп рдкрд░ рдПрдХ рдЖрд░рд╛рдорджрд╛рдпрдХ рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред
рдЪрд╛рдмрд┐рдпрд╛рдБ рдХрд┐рд╕реА рднреА рдФрд░ рдХрд┐рд╕реА рднреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдореИрдВ рдЕрдХреНрд╕рд░ рджреЛрд╕реНрддреЛрдВ рдФрд░ рдЯреАрд╡реА рдФрд░ рдкреАрд╕реА рдХреЛ hdmi рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рджреЗрдЦрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдорд░реЛрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдЬреИрд╕реЗ рдЖрдИрдЯреА-рдЬреАрд╡рди-рд╣реИрдХ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╡реЗ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рджрд╛рдпрд░рд╛ рдХрд╛рдлреА рд╡рд┐рд╕реНрддреГрдд рд╣реИ: рдШрд░реЗрд▓реВ рдореАрдбрд┐рдпрд╛ рдХреЗрдВрджреНрд░реЛрдВ рд╕реЗ рд▓реЗрдХрд░ рдЧреИрд░-рдШрд░реЗрд▓реВ рдореАрдбрд┐рдпрд╛ рдХреЗрдВрджреНрд░реЛрдВ рддрдХред
рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдЖрдкрдХреА рд░реБрдЪрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рд╕рдВрджрд░реНрдн:
Android рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ Http рдХреНрд▓рд╛рдЗрдВрдЯ (
http://loopj.com/android-async-http/ )
http.server (
http://docs.python.org/3.2/library/http.server.html )
рд╣рдо рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди (
http://habrahabr.ru/post/109944/ ) рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ
рдЖрджрдореА xmodmap
* рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдиреАрд▓реЗ рдмрд┐рдЬрд▓реА рдХреЗ рдЯреЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВ рдХреАрдмреЛрд░реНрдб рд╕реЗ рдЕрд▓рдЧ рд╕реЗ рдлреЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛