English:
[0003] Fig. 1 shows a computer system and server to run a remote desktop in accordance with various examples;
[0004] Fig. 2 shows a computer system with a keyboard in accordance with various examples;
[0005] Fig. 3 shows a computer-readable medium with machine-readable instructions to be executed by a processor in accordance with various examples;
[0006] Fig. 4 shows a method of establishing and providing data over a data channel from an I/O device in accordance with various examples;
[0007] Fig. 5 shows a computer-readable medium with machine-readable instructions to be executed by a virtual computer in accordance with various examples;
[0008] Fig. 6 shows a computer-readable medium with machine-readable instructions to be executed by a processor in accordance with various examples;
[0009] Fig. 7 shows a method of establishing and providing data over a data channel from an I/O device in accordance with various examples; and
[0010] Fig. 8 shows a computer-readable medium with machine-readable instructions to be executed by a virtual computer in accordance with various examples.
[0011] In one example in accordance with the present disclosure, an apparatus is provided. The apparatus comprises a non-transitory computer-readable medium storing machine-readable instructions that are, when executed by a processor, to cause the processor to: establish a first data channel between the processor and a virtual computer based on a connection between the processor and the virtual computer, the connection comprising a second data channel between the processor and the virtual computer, the second data channel to transfer input/output (I/O) data between the processor and the virtual computer; receive an input signal from an I/O device coupled to the processor; and provide an input message to the virtual computer via the first data channel, the input message based on the input signal.
[0012] In one example in accordance with the present disclosure, a method is provided. The method comprises establishing a first data channel between a processor and a virtual computer based on a connection between the processor and the virtual computer, the connection comprising a second data channel between the processor and the virtual computer, the second data channel to transfer input/output (I/O) data between the processor and the virtual computer; receiving an input signal from an I/O device coupled to the processor; and providing an input message to the virtual computer via the first data channel, the input message based on the input signal, where the I/O data corresponding to the input signal is not transferred via the second data channel.
[0014] Fig. 1 shows a computer system 1 10 and server 130 to run a remote desktop in accordance with various examples. Computer system 1 10 may include I/O devices, such as a keyboard 120. Computer system 1 10 may include other I/O devices, such as a mouse, trackball, microphone, camera, light pen, joystick, monitor, speakers, printer, Voice over Internet Protocol (VoIP) headset, or custom I/O devices. The I/O devices may be coupled to the computer system by a Universal Serial Bus (USB), Bluetooth, or another system. The I/O devices may be removable from the computer system, such as a USB device, or built into the system, such as a button on a mobile phone or tablet. The I/O devices may comprise buttons, switches, displays, or other forms of input or output. For a display I/O device, the screen may be activated if in a power-saving mode and a graphical element may be displayed and interacted with, such as via touch for a touchscreen, or using a mouse, trackball, stylus, or similar I/O device. Server 130 may execute a virtual computer. Computer system 1 10 may establish a connection 140 to the virtual computer executed on server 130. Computer system 1 10 may, for example, access a remote desktop being run using a virtual computer on server 130. Connection 140 may include a data channel that transfers I/O data, such as I/O data from the keyboard 120. The keypresses on the keyboard 120 may be transferred over the data channel of connection 140 to the virtual computer being executed on server 130. The virtual computer may transfer images over the data channel of connection 140 to the computer system 1 10 to display on a monitor. Computer system 1 10 may be a laptop computer, desktop computer, mobile phone, tablet, or other computer system.
[0015] Computer system 1 10 may establish a data channel 150, based on connection 140. Data channel 150 may be called a first data channel, and the data channel of connection 140 may be called a second data channel. Data channel 150 may transfer I/O data between the computer system 1 10 and the virtual computer on the server 130. The I/O data transferred via data channel 150 may overlap with the I/O data transferred over the data channel of connection 140. The I/O data transferred via data channel 150 may be additional to the I/O data transferred over the data channel of connection 140. For example, keyboard 120 may comprise a button for which, when pressed, no corresponding I/O data is transferred over the data channel of connection 140. This button may, for example, be intended to open up an e-mail application and use a special device driver or application running on the computer system 1 10 to process the signal from the keyboard 120. Pressing another key on keyboard 120, such as“Q,”“J,” or“Z” may cause corresponding I/O data to be transferred over the data channel of connection 140. When the e-mail button on keyboard 120 is pressed, computer system 1 10 may transfer the I/O data by providing a corresponding input message to the virtual computer on server 130 via data channel 150. The virtual computer on server 130 may then process the input message, which may cause the virtual computer to open an e-mail application.
[0016] Computer system 1 10 may comprise an application to interface with the I/O device and data channel 150. Used herein, an application is meant to encompass programs, services, daemons, device drivers, libraries, executables, and other sets of machine-readable instructions. The application may detect that a connection 140 has been established between the computer system 1 10 and a virtual computer, such as a virtual computer executing on a server 130. Based on detection of the connection 140, the computer system 1 10 may establish a data channel 150 between the computer system and virtual computer. A data channel of connection 140 and data channel 150 may both transfer input and output messages corresponding to I/O devices or even to the same I/O device. The virtual computer on server 130 may comprise an application to interface with data channel 150. The virtual computer’s application may receive input messages corresponding to I/O devices of computer system 1 10 via data channel 150. The virtual computer’s application may process those input messages. For example, if an e-mail button is pressed on keyboard 120, the application on computer system 1 10 may provide a corresponding input message over data channel 150. The virtual computer’s application may receive the input message and process the input message to recognize a request to open an e-mail application. Pressing such a button may close an application, such as the e-mail application. The virtual computer’s application may cause the virtual computer on server 130 to open the e-mail application in response to receiving the input message. In various examples, the virtual computer may be executed on a server 130 that is located remotely from computer system 1 10 or in close proximity to computer system 1 10. The virtual computer may be executed on the computer system 1 10 and the connection and data channels may operate via procedure or function calls between the various applications or exchanged through TCP/IP. The virtual computer may be a virtual machine.
[0017] Fig. 2 shows a computer system 200 with a keyboard 250 in accordance with various examples. Computer system 200 may comprise a processor 210, main memory 220, a network interface connector 230, storage 240, keyboard 250, and bus connector 270. Processor 210 may comprise a microprocessor, a microcomputer, a controller, a field programmable gate array (FPGA), or discrete logic to execute machine-readable instructions. Main memory 220 may comprise a random access memory (RAM), such as dynamic RAM (DRAM) or static RAM (SRAM), Flash memory, or electrically erasable programmable read only memory (EEPROM). Network interface connector 230 may comprise a network device to provide an Ethernet connection, wireless connection, or other connection. Network interface connector 230 may enable access to a private corporate network. Network interface connector 230 may enable access to the Internet. Storage 240 may comprise non-volatile or long-term storage for data or machine- readable instructions, such as a hard drive, solid state drive (SSD), Flash memory, or EEPROM. Processor 210, main memory 220, network interface connector 230, storage 240, and bus connector 270 may be coupled together, such as with a bus. Storage 240 may comprise machine-readable instructions 242, 244, 246 to be executed by processor 210. Main memory 220 may act as a cache for data transferred between storage 250 and processor 210. Processor 210 may transfer messages across a data channel via network interface connector 230.
[0018] Computer system 200 may comprise a processor 210 coupled to I/O devices, such as keyboard 250. Computer system 200 may be a server to execute a virtual computer.
[0019] Keyboard 250 may be coupled to processor 210 via the bus connector 270. The bus connector 270 may be a serial bus connector, USB connector, or other connector allowing the connection of peripherals or I/O devices to the processor 210. Keyboard 250 may include various keys representing alpha- numeric or special characters. Keyboard 250 may include e-mail button 260. When pressed while using a local computer system 200, e-mail button 260 may cause the computer system 200 to open up an e-mail application, such as if the e-mail application is not open, or switch to the e-mail window by bringing the e- mail window to the front of a graphical user interface and giving it focus. Keyboard 250 may include additional buttons, such as a button to cause the computer system 200 to enter a sleep mode, a button to cause the computer system 200 to cycle through open applications or windows, a button to minimize all windows, or a button to open up a file folder. When the local machine is connected to a virtual computer, a press of the e-mail button 260 on keyboard 250 may not be transferred by the connection to the virtual computer. Computer system 200 may execute an application including machine-readable instructions 242, 244, 246. Machine-readable instruction 242, when executed, may cause processor 210 to establish a data channel 242, such as a data channel between the processor 210 and the virtual computer. Machine-readable instruction 244, when executed, may cause processor 210 to provide messages via the data channel based on pressing of the e-mail button 260. The messages may be provided to the virtual computer. The virtual computer may execute an application that receives and processes such messages, opening an e-mail application on the virtual computer in response to the e-mail button 260 being pressed. E-mail button 260 may comprise a light source that may be turned on or off to indicate the presence of new e-mails. Machine-readable instruction 246, when executed, may cause processor 210 to activate the e-mail button’s 260 light source to indicate the presence of new e-mails.
[0020] Fig. 3 shows a computer-readable medium 300 with machine-readable instructions 310, 320, 330 to be executed by a processor in accordance with various examples. Computer-readable medium 300 may be storage, such as a hard drive, solid state drive (SSD), Flash memory, or EEPROM. Machine- readable instruction 310, when executed, may cause the processor to establish a first data channel between the processor and a virtual computer based on a connection between the processor and the virtual computer, the connection comprising a second data channel between the processor and the virtual computer, the second data channel to transfer input/output (I/O) data between the processor and the virtual computer. Machine-readable instruction 320, when executed, may cause the processor to receive an input signal from an I/O device coupled to the processor. Machine-readable instruction 330, when executed, may cause the processor to provide an input message to the virtual computer via the first data channel, the input message based on the input signal.
[0021] Machine-readable instructions 310, 320, 330 may be part of an application to be executed by the processor. The application may detect a connection between the processor and a virtual computer. The application may detect the connection by monitoring the processes and services running on the computer system and identifying which processes or services may establish such a connection. The application may detect the connection by querying another application if a connection exists. The application may detect the connection by monitoring a notification system that provides a notification when such a connection is created. The application may detect the connection by analyzing the title bars of windows or the contents of the windows. For example, a title bar or window may include an indication of such a connection, such as“connecting to” followed by a TCP/IP address. The application may also monitor network traffic to detect the connection or determine how to connect to the virtual computer, such as by a particular TCP/IP address. The application may also establish a connection based on interaction with a user, such as the user specifying a TCP/IP address to connect to. In various examples, the connection between the processor and the virtual computer may allow the creation of data channels. The application may create and use a data channel through the connection.
[0022] The application may register with a device driver or other application to receive an input signal from an I/O device. The input signal may be in the form of notification of an I/O event corresponding to the I/O device. The application may receive notification of all I/O event relating to the I/O device, or the application may receive notification of certain I/O events, such as the press of an e-mail button. The application may create an input message for delivery to the virtual computer, based on receipt of the input signal. The format of the input message may differ based on the details of the particular data channel established. The input message may comprise a device identifier for the I/O device, an indication of what I/O event took place, and a timestamp indicating when the I/O event took place. The application may process the input message to determine what action is to be performed by the virtual computer. The input message may comprise an application identifier and action to be performed by the virtual computer, such as identifying an e-mail application and an action to“open” the e-mail application. The application may be part of a device driver stack or have a corresponding component that is part of the device driver stack, where the input is processed by each member of the stack, which may modify the output for later members of the stack. For example, the application may receive notification for every press of a key or button on a keyboard. The application may pass along such notifications to the next member of the stack, except for notifications relating to the e-mail button, which may be handled by the application and not be passed along to the next member of the stack. The application may modify notifications or add notifications before passing them along to the next member of the device driver stack. The application may provide input messages to the virtual computer in response to receipt of some input signals, but cause actions to be taken by the processor of the local computer system in response to receipt of other input signals. For example, an e-mail button may open up an e-mail application on the virtual computer, but a sleep button may cause the local computer system to be put into a sleep mode, rather providing an input message to the virtual computer to process.
[0023] Fig. 4 shows a method 400 of establishing and providing data over a data channel from an I/O device in accordance with various examples. Method 400 may comprise establishing a first data channel between a processor and a virtual computer based on a connection between the processor and the virtual computer, the connection comprising a second data channel between the processor and the virtual computer, the second data channel to transfer input/output (I/O) data between the processor and the virtual computer 410. Method 400 may comprise receiving an input signal from an I/O device coupled to the processor 420. Method 400 may comprise providing an input message to the virtual computer via the first data channel, the input message based on the input signal, wherein the I/O data corresponding to the input signal is not transferred via the second data channel 430. The I/O data may not be transferred via the second data channel, as the connection between the processor and the virtual computer and its second data channel may not handle that I/O data. For example, the second data channel may handle I/O data in the form of scancodes from a keyboard, indicating when certain keys are pressed or depressed. The keyboard may also include an e-mail button which does not use a keyboard scancode, but provides I/O data in another form, such as via an interrupt, polling, or mapped memory. The data channel may handle I/O data corresponding to a mouse or keyboard, but not from other I/O devices.
[0024] Fig. 5 shows a computer-readable medium 500 with machine-readable instructions 510, 520, 530 to be executed by a virtual computer in accordance with various examples. Machine-readable instruction 510, when executed, may cause the virtual computer to establish a first data channel between the virtual computer and a processor based on a connection between the virtual computer and the processor, the connection comprising a second data channel between the virtual computer and the processor, the second data channel to transfer input/output (I/O) data between the processor and the virtual computer. Machine- readable instruction 520, when executed, may cause the virtual computer to receive an input message from the processor via the first data channel, the input message based on an input signal from an I/O device coupled to the processor. Machine-readable instruction 530, when executed, may cause the virtual computer to process the input message.
[0025] The machine-readable instructions 510, 520, 530 may be part of an application to be executed by the virtual computer. To establish the first data channel, the application may monitor communications between the virtual computer and the processor, waiting for a request from the processor to establish the connection. The application on the virtual computer may initiate the connection request.
[0026] In processing the input message, the virtual computer may analyze information regarding which I/O device or which I/O event caused the input message to be transferred. The application may cause the virtual computer to perform an action similar to what would be performed by the processor. For example, receiving an input message based on the pressing of an e-mail button may cause the virtual computer to open an e-mail application or switch to the window for the e-mail application or close the e-mail application if it is open. In various examples, the application may cause the virtual computer to perform a different action that would be performed by the processor. For example, receiving an input message based on the pressing of a sleep button may cause the virtual computer to begin session shutdown operations and terminate the connection between the virtual computer and the processor.
[0027] Fig. 6 shows a computer-readable medium 600 with machine-readable instructions 610, 620, 630, 640, 650, 660 to be executed by a processor in accordance with various examples. Machine-readable instruction 610, when executed, may cause the processor to establish a first data channel between the processor and a virtual computer based on a connection between the processor and the virtual computer, the connection comprising a second data channel between the processor and the virtual computer, the second data channel to transfer input/output (I/O) data between the processor and the virtual computer. Machine-readable instruction 620, when executed, may cause the processor to receive an input signal from an I/O device coupled to the processor. Machine- readable instruction 630, when executed, may cause the processor to provide an input message to the virtual computer via the first data channel, the input message based on the input signal. Machine-readable instruction 640, when executed, may cause the processor to prevent the transfer of I/O data corresponding to the input signal via the second data channel. Machine-readable instruction 650, when executed, may cause the processor to execute the virtual computer. Machine-readable instruction 660, when executed, may cause the processor to transfer I/O data from the I/O device via the second data channel.
[0028] The machine-readable instructions 610, 620, 630, 640, 650, 660 may be part of an application to be executed by the processor. The processor may prevent the transfer of I/O data corresponding to the input signal via the second data channel by filtering the I/O events. The application may be part of a device driver stack or have a corresponding component that is part of the device driver stack. The application may detect a certain I/O event that is for transfer to the virtual computer via the first data channel. The application may indicate that it will handle that certain I/O event, so other applications do not try to handle it. The application may pass other I/O events to other applications, but not pass this certain I/O event to other applications.
[0029] In various examples, the virtual computer may be executed on the processor, rather than on a remote server. The data channels may comprise function or procedure calls on the virtual computer for passing data between the processor and the virtual computer being executed by the processor.
[0030] In various examples, I/O data from a single I/O device may cause messages to be transmitted via both data channels. For example, pressing“Q,” “J,” or“Z” on a keyboard may cause a message to be transmitted via the second data channel. Pressing the e-mail button on the keyboard may cause a message to be transmitted via the first data channel.
[0031] Fig. 7 shows a method 700 of establishing and providing data over a data channel from an I/O device in accordance with various examples. Method 700 may comprise detecting the connection between the processor and the virtual computer 705. Method 700 may comprise establishing a first data channel between a processor and a virtual computer based on a connection between the processor and the virtual computer via a network interface, the connection comprising the first data channel and a second data channel between the processor and the virtual computer, the second data channel to transfer input/output (I/O) data between the processor and the virtual computer 710. Method 700 may comprise receiving an input signal from an I/O device coupled to the processor 720. Method 700 may comprise providing an input message to the virtual computer via the first data channel, the input message based on the input signal, wherein the I/O data corresponding to the input signal is not transferred via the second data channel 730. Method 700 may comprise receiving a response message from the virtual computer via the first data channel based on providing the input message to the virtual computer 740.
[0032] The connection may comprise both the first data channel and the second data channel. The connection may be established first. The second data channel may be established as part of establishing the connection. The first data channel may be established later, after detecting the connection. The first data channel may be established by using functionality of the connection to establish the first data channel. For example, the connection may make use of a remote desktop application, which may allow the creation of virtual channels for the transfer of data. The first data channel may be established by creating a virtual channel through the remote desktop application.
[0033] A virtual computer may send a response to the processor after receiving an input message. The response may be an acknowledgement of receipt of the input message. If such acknowledgement is not received, the processor may provide the input message to the virtual computer another time. The response may indicate the input message was successfully processed or indicate an error. The response may indicate some action to be taken by the processor or an I/O device coupled to the local machine. For example, the input signal may have been provided in response to an e-mail button being pressed on a keyboard. After receiving a corresponding input message, the virtual computer may open an e-mail application. The e-mail button may also comprise a light source that illuminates the button if there are new e-mails. If the e-mail application opens up successfully, the virtual computer may send a response to the processor to deactivate the light source. The virtual computer may have detected new e-mails and provided a message to the processor to activate the light source of the e-mail button. If the response indicates an error, the processor may record an error message to an error log.
[0034] Fig. 8 shows a computer-readable medium 800 with machine-readable instructions 810, 820, 830, 840, 850, 860 to be executed by a virtual computer in accordance with various examples. Machine-readable instruction 810, when executed, may cause the virtual computer to establish a first data channel between the virtual computer and a processor based on a connection between the virtual computer and the processor, the connection comprising a second data channel between the virtual computer and the processor, the second data channel to transfer input/output (I/O) data between the processor and the virtual computer. Machine-readable instruction 820, when executed, may cause the virtual computer to receive an input message from the processor via the first data channel, the input message based on an input signal from an I/O device coupled to the processor, wherein I/O data corresponding to the input signal is not transferred via the second data channel. Machine-readable instruction 830, when executed, may cause the virtual computer to process the input message. Machine-readable instruction 840, when executed, may cause the virtual computer to open an application based on the input message. Machine-readable instruction 850, when executed, may cause the virtual computer to interface with an application programming interface (API) on the virtual computer. Machine- readable instruction 860, when executed, may cause the virtual computer to provide a message to the processor based on the input message.
[0035] The virtual computer may take an action based on processing of the input message. The action may include interacting with the operating system or another application being executed on the virtual computer. This interaction may be performed by interfacing with an API of the operation system or other application. This interaction may be done by performing function or procedure calls into the API of the operating system or other application. The interaction may be performed through Ul automation. For example, the application on the virtual computer may analyze the user interface to find an e-mail icon and emulate a mouse-click on the icon to open the e-mail application.
[0036] By way of further example, a computer system may comprise a VoIP device that couples to the computer system via USB. The VoIP device may include a button for answering a VoIP call, a button for hanging up a VoIP call, and a display. The display may be a Liquid Crystal Display (LCD) or based on Light Emitting Diodes (LED). The display may be to display caller identification for incoming calls. The display may be to display a length of the call. The computer system may establish a connection to a virtual computer, such as by executing a remote desktop application. An application on the computer system may establish a first data channel with an application on the virtual computer. I/O events related to the keyboard and mouse of the computer system may be communicated with the virtual computer via a second data channel that is part of the connection. I/O events related to the VoIP device or VoIP calls may be transferred via the first data channel. The virtual computer may detect an incoming VoIP call on a VoIP application running on the virtual computer. The virtual computer may send a message to the processor via the first data channel, communicating a caller identification of the incoming call. If a user presses the button for answering a VoIP call, the application on the processor may send an input message to the virtual computer via the first data channel. The application on the virtual computer may process the input message and use the VoIP application’s API to have the VoIP application answer the call. The application on the virtual computer may provide a message to the processor via the first data channel indicating successful processing of the input message, or it may return an error message. The data for the VoIP call may be transferred via the second data channel. The data for the VoIP call may be transferred via a third data channel. If the user presses the button for hanging up a VoIP call, the application on the processor may send an input message to the virtual computer. The application on the virtual computer may use the VoIP application’s API to hang up the call. The application on the virtual computer may provide a message to the processor via the first data channel indicating success or failure in processing and acting on the input message.

中文:
[0003]图1示出根据各个示例的运行远程台式机的计算机系统和服务器;
[0004]图2示出根据各个示例的具有键盘的计算机系统;
[0005]图3示出根据各个示例的具有要由处理器执行的机器可读指令的计算机可读介质;
[0006]图4示出根据各个示例的建立数据信道并且通过数据信道从I/O设备提供数据的方法;
[0007]图5示出根据各个示例的具有要由虚拟计算机执行的机器可读指令的计算机可读介质;
[0008]图6示出根据各个示例的要由处理器执行的机器可读指令的计算机可读介质;
[0009]图7示出根据各个示例的建立数据信道并且通过数据信道从I/O设备提供数据的方法;以及
[0010]图8示出根据各个示例的具有要由虚拟计算机执行的机器可读指令的计算机可读介质。
[0011]在一个根据本公开的示例中,提供了一种装置。该装置包括存储机器可读指令的非暂时性计算机可读介质,该机器可读指令在由处理器执行时使处理器:基于处理器和虚拟计算机之间的连接来建立处理器和虚拟计算机之间的第一数据信道,该连接包括处理器和虚拟计算机之间的第二数据信道,该第二数据信道在处理器和虚拟计算机之间传递输入/输出(I/O)数据;从耦接到处理器的I/O设备接收输入信号;以及经由第一数据信道向虚拟计算机提供输入消息,该输入消息基于输入信号。
[0012]在一个根据本公开的示例中,提供了一种方法。该方法包括:基于处理器和虚拟计算机之间的连接在处理器和虚拟计算机之间建立第一数据信道,该连接包括处理器和虚拟计算机之间的第二数据信道,第二数据信道在处理器和虚拟计算机之间传递输入/输出(I/O)数据;从耦接到处理器的I/O设备接收输入信号;以及经由第一数据信道向虚拟计算机提供输入消息,该输入消息基于输入信号,其中与输入信号相对应的I/O数据不经由第二数据信道传递。
[0014]图1示出根据各个示例的运行远程台式机的计算机系统110和服务器130。计算机系统110可以包括诸如键盘120之类的I/O设备。计算机系统110可以包括其他I/O设备,诸如鼠标、跟踪球、麦克风、照相机、光笔、控制杆、显示屏、扬声器、打印机、通过网际协议的语音(VoIP)耳机或定制I/O设备。I/O设备可以通过通用串行总线(USB)、蓝牙或另一个系统耦接到计算机系统。I/O设备可以是从计算机系统可移除的(诸如USB设备)或被构建到系统中(诸如移动式电话或平板机上的按钮)。I/O设备可以包括按钮、开关、显示器或其他形式的输入/输出。对于显示器I/O设备,如果处于功率节省模式中,可以激活屏幕,并且可以显示图形元素并且诸如经由对于触摸屏的触摸或使用鼠标、跟踪球、铁笔或类似的I/O设备来与图形元素交互。服务器130可以执行虚拟计算机。计算机系统110可以建立至虚拟计算机(其在服务器130上执行的)的连接140。计算机系统110例如可以使用服务器130上的虚拟计算机来访问运行的远程台式机。连接140可以包括传递I/O数据的(诸如从键盘120传递I/O数据的)数据信道。可以通过连接140的数据信道向在服务器130上执行的虚拟计算机传递键盘120上的键盘按压。虚拟计算机可以通过连接140的数据信道向计算机系统110传递图像以在显示屏上显示。计算机系统110可以是膝上型计算机、台式计算机、移动式电话、平板机或其他计算机系统。
[0015]计算机系统110可以基于连接140来建立数据信道150。数据信道150可以被叫作第一数据信道,并且连接140的数据信道可以被叫作第二数据信道。数据信道150可以在计算机系统110和服务器130上的虚拟计算机之间传递I/O数据。经由数据信道150传递的I/O数据可以与通过连接140的数据信道传递的I/O数据重叠。可以将经由数据信道150传递的I/O数据附加到通过连接140的数据信道所传递的I/O数据。例如,键盘120可以包括被按压时不通过连接140的数据信道传递对应的I/O数据的按钮。该按钮例如可以旨在开启电子邮件应用并且使用在计算机系统110上运行的特殊设备驱动器或应用以处理来自键盘120的信号。按压键盘120上的另一个键(诸如“Q、”“J、”或“Z”)可以使得通过连接140的数据信道来传递对应的I/O数据。当按压键盘120上的电子邮件按钮时,计算机系统110可以通过经由数据信道150向服务器130上的虚拟计算机提供对应的输入消息来传递I/O数据。服务器130上的虚拟计算机然后可以处理输入消息,该输入消息可以使虚拟计算机打开电子邮件应用。
[0016]计算机系统110可以包括与I/O设备和数据信道150接合的应用。在本文使用的,应用指的是包含程序、服务、守护程序、设备驱动器、库、可执行体和机器可读指令的其他集合。应用可以检测已经在计算机系统110和虚拟计算机(诸如在服务器130上执行的虚拟计算机)之间建立了连接140。基于连接140的检测,计算机系统110可以在计算机系统和虚拟计算机之间建立数据信道150。连接140的数据信道和数据信道150可以传递与I/O设备或甚至相同的I/O设备相对应的输入和输出消息两者。服务器130上的虚拟计算机可以包括与数据信道150接合的应用。虚拟计算机的应用可以经由数据信道150来接收与计算机系统110的I/O设备相对应的输入消息。虚拟计算机的应用可以处理那些输入消息。例如,如果在键盘120上按压电子邮件按钮,则计算机系统110上的应用可以通过数据信道150来提供对应的输入消息。虚拟计算机的应用可以接收输入消息并且对输入消息进行处理以辨识打开电子邮件应用的请求。按压这样的按钮可以关闭诸如电子邮件应用之类的应用。虚拟计算机的应用可以使服务器130上的虚拟计算机响应于接收到输入消息来打开电子邮件应用。在各个示例中,可以在位置远离计算机系统110的或紧靠计算机系统110的服务器130上执行虚拟计算机。可以在计算机系统110上执行虚拟计算机,并且数据信道可以经由各个应用之间的或通过TCP/IP交换的进程或函数调用来进行操作。虚拟计算机可以是虚拟机。
[0017]图2示出根据各个示例的具有键盘250的计算机系统200。计算机系统200可以包括处理器210、主存储器220、网络接口连接器230、储存器240、键盘250以及总线连接器270。处理器210可以包括微处理器、微型计算机、控制器、现场可编程门阵列(FPGA)或执行机器可读指令的离散逻辑。主存储器220可以包括诸如动态RAM(DRAM)或静态RAM(SRAM)之类的随机存取存储器(RAM)、闪速存储器或电可擦可编程序只读存储器(EEPROM)。网络接口连接器230可以包括网络设备来提供以太网连接、无线连接或其他连接。网络接口连接器230可以使得能够访问私有企业网。网络接口连接器230可以使得能够访问因特网。储存器240可以包括用于数据或机器可读指令的非易失性或长期储存器,诸如硬盘驱动器、固态驱动器(SSD)、闪速存储器或EEPROM。处理器210、主存储器220、网络接口连接器230、储存器240以及总线连接器270可以诸如通过总线被耦接在一起。储存器240可以包括要由处理器210执行的机器可读指令242、244、246。主存储器220可以充当用于在储存器250和处理器210之间传递的数据的缓存。处理器210可以经由网络接口连接器230通过数据信道传递消息。
[0018]计算机系统200可以包括耦接到诸如键盘250之类的I/O设备的处理器210。计算机系统200可以是执行虚拟计算机的服务器。
[0019]键盘250可以经由总线连接器270耦接到处理器210。总线连接器270可以是串行总线连接器、USB连接器或其他连接器,允许外围设备或I/O设备连接到处理器210。键盘250可以包括表示字母数字或专用字符的各个键。键盘250可以包括电子邮件按钮260。当使用本地计算机系统200被按压时,电子邮件按钮260可以使计算机系统200在诸如如果电子邮件应用没有打开时开启电子邮件应用或者提供将电子邮件窗口带到图形用户接口的前方并且给予其关注而切换到电子邮件窗口。键盘250可以包括附加的按钮,诸如使计算机系统200进入睡眠模式的按钮、使计算机系统200浏览打开的应用或窗口的按钮、最小化所有窗口的按钮或开启文件夹的按钮。当本地机器连接到虚拟计算机时,可以通过到虚拟计算机的连接来传递键盘250上的电子邮件按钮260的按压。计算机系统200可以执行包括机器可读指令242、244、246的应用。机器可读指令242在被执行时,可以使处理器210建立数据信道242,诸如处理器210和虚拟计算机之间的数据信道。机器可读指令244在被执行时,可以使处理器210基于电子邮件按钮260的按压来经由数据信道提供消息。可以向虚拟计算机提供消息。虚拟计算机可以执行接收和处理这样的消息的应用,响应于电子邮件按钮260被按压,在虚拟计算机上打开电子邮件应用。电子邮件按钮260可以包括可以被开启或关闭以指示新的电子邮件的存在的光源。机器可读指令246在被执行时,可以使处理器210激活电子邮件按钮的260光源以指示新的电子邮件的存在。
[0020]图3示出根据各个示例的具有要由处理器执行的机器可读指令310、机器可读指令320、机器可读指令330的计算机可读介质300。计算机可读介质300可以是储存器,诸如硬盘驱动器、固态驱动器(SSD)、闪速存储器或EEPROM。机器可读指令310在被执行时,可以使处理器基于处理器和虚拟计算机之间的连接在处理器和虚拟计算机之间建立第一数据信道,该连接包括处理器和虚拟计算机之间的第二数据信道,该第二数据信道在处理器和虚拟计算机之间传递输入/输出(I/O)数据。机器可读指令320在被执行时,可以使处理器从耦接到处理器的I/O设备接收输入信号。机器可读指令330在被执行时,可以使处理器经由第一数据信道向虚拟计算机提供输入消息,该输入消息基于输入信号。
[0021]机器可读指令310、机器可读指令320、机器可读指令330可以是要由处理器执行的应用的一部分。应用可以检测处理器和虚拟计算机之间的连接。应用可以通过监视在计算机系统上运行的进程和服务并且识别哪些进程或服务可以建立这样的连接来检测连接。如果连接存在,则应用可以通过查询另一个应用来检测连接。应用可以通过监视当创建连接时提供通知的通知系统来检测这样的连接。应用可以通过分析窗口的标题栏或窗口的内容来检测连接。例如,标题栏或窗口可以包括这样的连接的指示,诸如后面是TCP/IP地址的“连接到”。应用也可以监视网络业务以检测连接或确定如何连接到虚拟计算机(诸如通过特定TCP/IP地址)。应用也可以基于与用户的交互(诸如用户指定连接到的TCP/IP地址)来建立连接。在各个示例中,处理器和虚拟计算机之间的连接可以允许数据信道的创建。应用可以通过连接创建和使用数据信道。
[0022]应用可以登记到设备驱动器或其它应用以从I/O设备接收输入信号。输入信号可以是与I/O设备相对应的I/O事件的通知的形式。应用可以接收与I/O设备有关的所有I/O事件的通知,或者应用可以接收诸如电子邮件按钮的按压之类的特定I/O事件的通知。应用可以基于输入信号的接收来创建用于输送到虚拟计算机的输入消息。基于所建立的特定数据信道的细节,输入消息的格式可以不同。输入消息可以包括I/O设备的设备标识符、什么I/O事件发生的指示以及指示I/O事件何时发生的时间戳。应用可以处理输入消息以确定要由虚拟计算机执行什么动作。输入消息可以包括应用标识符和要由虚拟计算机执行的动作,诸如识别电子邮件应用和“打开”电子邮件应用的动作。应用可以是设备驱动栈的一部分或具有作为设备驱动栈的一部分的对应的组件,其中由堆栈的每个元件来处理输入,其可以修改用于堆栈的稍后元件的输出。例如,应用可以接收对键盘上的键或按钮的每次按压的通知。除可以由应用处理的并且不被传递到堆栈的下一元件的与电子邮件按钮有关的通知之外,应用可以向堆栈的下一元件传递这样的通知。在将通知传递到设备驱动栈的下一元件之前,应用可以修改通知或添加通知。应用可以响应于接收一些输入信号来向虚拟计算机提供输入消息,但是响应于接收其他输入信号使本地计算机系统的处理器采取动作。例如,电子邮件按钮可以开启虚拟计算机上的电子邮件应用,但是睡眠按钮可以使本地计算机系统被置入睡眠模式,而向虚拟计算机提供输入消息来进行处理。
[0023]图4示出根据各个示例的建立数据信道并且通过数据信道从I/O设备提供数据的方法。方法400可以包括:基于处理器和虚拟计算机之间的连接来在处理器和虚拟计算机之间建立第一数据信道,该连接包括处理器和虚拟计算机之间的第二数据信道,该第二数据信道在处理器和虚拟计算机之间传递输入/输出(I/O)数据410。方法400可以包括从耦接到处理器的I/O设备接收输入信号420。方法400可以包括经由第一数据信道向虚拟计算机提供输入消息,该输入消息基于输入信号,其中,与输入信号相对应的I/O数据不经由第二数据信道传递430。I/O数据可以不经由第二数据信道传递,这是因为处理器和虚拟计算机之间的连接和其第二数据信道可以不处理该I/O数据。例如,第二数据信道可以处理来自键盘的扫描码的形式的I/O数据,指示特定键何时被按压或释放。键盘还可以包括不使用键盘扫描码的电子邮件按钮,但是以另一种形式(诸如经由中断、轮询或映射存储器)来提供I/O数据。数据信道可以处理与鼠标或键盘相对应的I/O数据,而不是处理来自其他I/O设备的I/O数据。
[0024]图5示出根据各个示例的、具有要由虚拟计算机执行的机器可读指令510、机器可读指令520、机器可读指令530的计算机可读介质500。机器可读指令510在被执行时,可以使虚拟计算机基于虚拟计算机和处理器之间的连接在虚拟计算机和处理器之间建立第一数据信道,该连接包括虚拟计算机和处理器之间的第二数据信道,该第二数据信道在处理器和虚拟计算机之间传递输入/输出(I/O)数据。机器可读指令520在被执行时,可以使虚拟计算机经由第一数据信道从处理器接收输入消息,该输入消息基于来自耦接到处理器的I/O设备的输入信号。机器可读指令530在被执行时,可以使虚拟计算机处理输入消息。
[0025]机器可读指令510、机器可读指令520、机器可读指令530可以是要由虚拟计算机执行的应用的一部分。为了建立第一数据信道,应用可以监视虚拟计算机和处理器之间的通信,等待来自处理器的建立连接的请求。虚拟计算机上的应用可以发起连接请求。
[0026]在处理输入消息时,虚拟计算机可以分析与哪个I/O设备或哪个I/O事件引起传递输入消息的有关的信息。应用可以使虚拟计算机执行与要由处理器执行的动作类似的动作。例如,接收基于电子邮件按钮的按压的输入消息可以使虚拟计算机打开电子邮件应用或切换到用于电子邮件应用的窗口或者在其被打开的时候关闭电子邮件应用。在各个示例中,应用可以使虚拟计算机执行与要由处理器执行的动作不同的动作。例如,接收基于睡眠按钮的按压的输入消息可以使虚拟计算机开始会话关闭操作并且终止虚拟计算机和处理器之间的连接。
[0027]图6示出根据各个示例的、具有要由处理器执行的机器可读指令610、机器可读指令620、机器可读指令630、机器可读指令640、机器可读指令650、机器可读指令660的计算机可读介质600。机器可读指令610在被执行时,可以使处理器基于处理器和虚拟计算机之间的连接在处理器和虚拟计算机之间建立第一数据信道,该连接包括处理器和虚拟计算机之间的第二数据信道,该第二数据信道在处理器和虚拟计算机之间传递输入/输出(I/O)数据。机器可读指令620在被执行时,可以使处理器从耦接到处理器的I/O设备接收输入信号。机器可读指令630在被执行时,可以使处理器经由第一数据信道向虚拟计算机提供输入消息,该输入消息基于输入信号。机器可读指令640在被执行时,可以使处理器阻止经由第二数据信道传递与输入信号相对应的I/O数据。机器可读指令650在被执行时,可以使处理器执行虚拟计算机。机器可读指令660在被执行时,可以使处理器经由第二数据信道从I/O设备传递I/O数据。
[0028]机器可读指令610、机器可读指令620、机器可读指令630、机器可读指令640、机器可读指令650、机器可读指令660可以是要由处理器执行的应用的一部分。处理器可以通过过滤I/O事件来阻止经由第二数据信道传递与输入信号相对应的I/O数据。应用可以是设备驱动栈的一部分或具有作为设备驱动栈的一部分的对应的组件。应用可以检测经由第一数据信道向虚拟计算机传递的特定I/O事件。应用可以指示其将处理该特定I/O事件,因此其它应用不尝试处理其。应用可以将其他I/O事件传递到其它应用,而不是将该特定I/O事件传递到其它应用。
[0029]在各个示例中,可以在处理器上、而不是在远程服务器上执行虚拟计算机。数据信道可以包括虚拟计算机上的函数或进程调用用于在处理器和由处理器执行的虚拟计算机之间传递数据。
[0030]在各个示例中,来自单个I/O设备的I/O数据可以使得经由两个数据信道来传送消息。例如,按压键盘上的“Q”“J”或“Z”可以使得经由第二数据信道来传送消息。按压键盘上的电子邮件按钮可以使得经由第一数据信道来传送消息。
[0031]图7示出根据各个示例的、建立数据信道并且通过数据信道从I/O设备提供数据的方法700。方法700可以包括检测处理器和虚拟计算机之间的连接705。方法700可以包括经由网络接口基于处理器和虚拟计算机之间的连接来在处理器和虚拟计算机之间建立第一数据信道,该连接包括处理器和虚拟计算机之间的第一数据信道和第二数据信道,该第二数据信道在处理器和虚拟计算机之间传递输入/输出(I/O)数据710。方法700可以包括从耦接到处理器的I/O设备接收输入信号720。方法700可以包括经由第一数据信道向虚拟计算机提供输入消息,该输入消息基于输入信号,其中,与输入信号相对应的I/O数据不经由第二数据信道传递730。方法700可以包括基于向虚拟计算机提供输入消息来经由第一数据信道从虚拟计算机接收响应消息740。
[0032]连接可以包括第一数据信道和第二数据信道两者。可以首先建立连接。可以作为建立连接的一部分来建立第二数据信道。可以在检测到连接之后稍后建立第一数据信道。可以通过使用建立第一数据信道的连接的功能来建立第一数据信道。例如,连接可以利用远程桌面应用,该远程桌面应用可以允许创建用于传递数据的虚拟信道。可以通过经由远程桌面应用创建虚拟信道来建立第一数据信道。
[0033]虚拟计算机可以在接收到输入消息之后向处理器发送响应。响应可以是收到输入消息的确认。如果没有接收到这样的确认,则处理器可以在另一个时间向虚拟计算机提供输入消息。响应可以指示输入消息被成功地处理或指示错误。响应可以指示要由处理器或耦接到本地机器的I/O设备所采取的特定动作。例如,可以已经响应于在键盘按压电子邮件按钮而提供了输入信号。在接收到对应的输入消息之后,虚拟计算机可以打开电子邮件应用。电子邮件按钮还可以包括光源,如果存在新的电子邮件,则该光源点亮按钮。如果电子邮件应用成功地开启,则虚拟计算机可以向处理器发送响应来将光源去激活。虚拟计算机可能已经检测到新的电子邮件并且向处理器提供了激活电子邮件按钮的光源的消息。如果响应指示错误,则处理器可以将错误消息记录到错误日志。
[0034]图8示出根据各个示例的、具有要由虚拟计算机执行的机器可读指令810、机器可读指令820、机器可读指令830、机器可读指令840、机器可读指令850、机器可读指令860的计算机可读介质800。机器可读指令810在被执行时,可以使虚拟计算机基于虚拟计算机和处理器之间的连接在虚拟计算机和处理器之间建立第一数据信道,该连接包括虚拟计算机和处理器之间的第二数据信道,该第二数据信道在处理器和虚拟计算机之间传递输入/输出(I/O)数据。机器可读指令820在被执行时,可以使虚拟计算机经由第一数据信道从处理器接收输入消息,该输入消息基于来自耦接到处理器的I/O设备的输入信号,其中,与输入信号相对应的I/O数据不经由第二数据信道传递。当被机器可读指令830执行时,可以使虚拟计算机处理输入消息。当被机器可读指令840执行时,可以使虚拟计算机打开基于输入消息来打开应用。机器可读指令850在被执行时,可以使虚拟计算机与虚拟计算机上的应用编程接口(API)接合。机器可读指令860在被执行时,可以使虚拟计算机基于输入消息来向处理器提供消息。
[0035]虚拟计算机可以基于输入消息的处理来采取动作。动作可以包括与在虚拟计算机上执行的操作系统或另一个应用交互。可以通过与操作系统的API或其它应用接合来执行该交互。可以通过将函数或进程调用执行到操作系统的API或其它应用中来进行该交互。可以通过UI自动化来执行交互。例如,虚拟计算机上的应用可以分析用户接口以找出电子邮件图标并且模拟图标上的鼠标点击以打开电子邮件应用。
[0036]作为另外的示例,计算机系统可以包括经由USB耦接到计算机系统的VoIP设备。VoIP设备可以包括用于应答VoIP呼叫的按钮、用于挂断VoIP呼叫的按钮以及显示器。显示器可以是液晶显示器(LCD)或基于发光二极管(LED)。显示器可以显示呼入呼叫的呼叫者标识。显示器可以显示呼叫的长度。计算机系统可以诸如通过执行远程桌面应用来建立到虚拟计算机的连接。计算机系统上的应用可以与虚拟计算机上的应用建立第一数据信道。与计算机系统的键盘和鼠标有关的I/O事件可以经由作为连接的一部分的第二数据信道与虚拟计算机进行通信。可以经由第一数据信道来传递与VoIP设备或VoIP呼叫有关的I/O事件。虚拟计算机可以检测在虚拟计算机上运行的VoIP应用上的呼入VoIP呼叫。虚拟计算机可以经由第一数据信道向处理器发送消息,来传送呼入呼叫的呼叫者标识。如果用户按压用于应答VoIP呼叫的按钮,则处理器上的应用可以经由第一数据信道向虚拟计算机发送输入消息。虚拟计算机上的应用可以处理输入消息并且使用VoIP应用的API来使VoIP应用回答呼叫。虚拟计算机上的应用可以经由第一数据信道向处理器提供指示输入消息的成功的处理的消息或其可以返回错误消息。可以经由第二数据信道传递用于VoIP呼叫的数据。可以经由第三数据信道来传递用于VoIP呼叫的数据。如果用户按压用于挂断VoIP呼叫的按钮,则处理器上的应用可以向虚拟计算机发送输入消息。虚拟计算机上的应用可以使用VoIP应用的API来挂断呼叫。虚拟计算机上的应用可以经由第一数据信道向处理器提供指示在对输入消息的处理和动作中的成功或失败的消息。