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 receiving data over a data channel to provide to 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 receiving data over a data channel to provide to 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 output message from the virtual computer via the first data channel; identify an I/O device coupled to the processor based on the output message; and provide an output signal to the I/O device, the output signal based on the output message.
[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 output message from the virtual computer via the first data channel, the output message including a device class identifier; identifying an I/O device coupled to the processor based on the device class identifier; and providing an output signal to the I/O device, the output signal based on the output message.
[0013] 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 virtual computer, to 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 virtual computer and the processor; detect an event at the virtual computer; and provide an output message to the processor via the first data channel based on the event.
[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, sound system, printer, light source, haptic device, Voice over Internet Protocol (VoIP) headset, or custom I/O device. 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, light sources, 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 the 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 and sounds to be played over a speaker. Computer system 1 10 may be a laptop computer, desktop computer, mobile phone, tablet, or other computer system.
[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 detect events at the virtual computer and provide output messages to the computer system 1 10 via data channel 150 for interacting with I/O devices. The computer system’s application may process those output messages. For example, if the application on the virtual computer detects that new e-mails are present, the application on the virtual computer may provide a corresponding output message over data channel 150. The computer system’s application may receive the output message and process the output message to recognize a request to perform an I/O operation. The computer system’s application may cause the computer system 1 10 to activate a light source, play a sound, or cause a haptic device to cause a vibration. Activating a light source may mean to turn it on, while deactivating a light source may mean to turn it off. 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 an e-mail button 260 with a light source. When operating locally, computer system 200 may detect when new e-mails are present and activate the light source for the e-mail button 260. When an e-mail application is opened, the computer system 200 may deactivate the light source for the e-mail button 260. When the local computer system 200 is connected to a virtual computer, the virtual computer may not transfer a command to the computer system 200 to activate or deactivate the light source for the e-mail button 260. The command may not be transferred via the second data channel, as the connection between the local computer system 200 and the virtual computer and its second data channel may not handle such I/O commands. For example, the connection may handle I/O data such as sending back screenshots to display on a monitor, but not activating light sources, such as a light source indicating new e-mails are present. The 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, such as a data channel between the processor 210 and the virtual computer. Machine-readable instruction 244, when executed, may cause processor 210 to receive output messages via the data channel from the virtual computer based on the detection of new e-mails. Machine-readable instruction 244, when executed, may cause processor 210 to activate the e-mail button’s light source to indicate the presence of new e-mails. For example, the computer system may process such output messages and activate or deactivate the light source for the e-mail button 260 based on the output messages from the virtual computer. The virtual computer may execute an application that detects such events and provides such output messages.
[0020] Fig. 3 shows a computer-readable medium 300 with machine-readable instructions 310, 320, 330, 340 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 output message from the virtual computer via the first data channel. Machine-readable instruction 330, when executed, may cause the processor to identify an I/O device coupled to the processor based on the output message. Machine-readable instruction 340, when executed, may cause the processor to provide an output signal to the I/O device, the output signal based on the output message.
[0021] Machine-readable instructions 310, 320, 330, 340 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 a remote virtual computer, such as by a particular TCP/IP address. The application may also establish the 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 provide an output signal to an I/O device. The output signal may be in the form of notification of an event the I/O device is capable of handling. The application may create an output signal to provide the I/O device, based on receipt of the output message. The format of the output message may differ based on the details of the particular data channel established. The output message may comprise a device class identifier that corresponds to the I/O device, an indication of what event took place, and a timestamp indicating when the event took place. The application may process the output message to determine what action is to be performed by the I/O device. The output message may comprise the device class identifier and action to be performed by the I/O device, such as identifying a light source and an action to activate the light source. The application may be part of a device driver stack or have a corresponding component that is part of the device driver stack. The device class identifier may identify a class of devices, such as sound systems or light sources, or devices with capabilities of playing sounds or providing illumination. In various examples, the device class identifier may correspond to all devices that illuminate to indicate the presence of new e-mails, or to all devices that illuminate. The output message may comprise a device identifier. For example, the computer system may comprise multiple light sources. One light source may be to indicate the presence of new e-mails and the other to indicate whether a Voice over Internet Protocol (VoIP) call is taking place. The output message may specify which light source should activate or deactivate. One I/O device may have multiple similar or separate elements capable of output. A keyboard may include one light source to indicate the presence of new e-mails and another light source to indicate a VoIP call is taking place. The output message may include data to identify a specific element or functionality of an I/O device. An output message may include a device identifier to identify a specific I/O device.
[0023] Fig. 4 shows a method 400 of establishing and receiving data over a data channel to provide to 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 output message from the virtual computer via the first data channel, the output message including a device class identifier 420. Method 400 may comprise identifying an I/O device coupled to the processor based on the device class identifier 430. Method 400 may comprise providing an output signal to the I/O device, the output signal based on the output message 440.
[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 virtual computer and the processor. Machine- readable instruction 520, when executed, may cause the virtual computer to detect an event at the virtual computer. Machine-readable instruction 530, when executed, may cause the virtual computer to provide an output message to the processor via the first data channel based on the event.
[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 detecting an event, the application at the virtual computer may register for event notifications from the operating system or an application. For example, the application at the virtual computer may register with an e-mail application to receive notifications such as when new e-mails are present. The application may register with a VoIP application to receive notifications when a call is incoming or when a call ends. The application may register with an application to receive notifications when a new news article or video is available on a news or video feed. The application may register with the operating system to receive notifications when high priority updates are available. The application may register with an individual application or may register with an event service available on the virtual computer. The event service may aggregate notifications from multiple sources.
[0027] The application at the virtual computer may detect an event by analyzing the user interface similar to user interface automation. For example, the graphical user interface may be analyzed to determine which application windows are open and what is occurring. The application at the virtual computer may recognize a window as corresponding to a VoIP application and identify an interface object that indicates when a call is incoming. The application at the virtual computer may analyze the appearance of that interface object to determine if an event is occurring, such as an interface object indicating a call is incoming.
[0028] Fig. 6 shows a computer-readable medium 600 with machine-readable instructions 610, 620, 630, 640, 650, 660, 670 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 output message from the virtual computer via the first data channel. Machine-readable instruction 630, when executed, may cause the processor to identify an I/O device coupled to the processor based on the output message. Machine-readable instruction 640, when executed, may cause the processor to provide an output signal to the I/O device, the output signal based on the output message, the output signal to the I/O device to cause the I/O device to activate a light source. 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 receive a response from the I/O device based on the output signal. Machine-readable instruction 670, when executed, may cause the processor to provide a response message to the virtual computer via the first data channel based on the response.
[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] Fig. 7 shows a method 700 of establishing and receiving data over a data channel to provide to an I/O device in accordance with various examples. 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, comprising communicating via a network interface, 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 710. Method 700 may comprise receiving an output message from the virtual computer via the first data channel, the output message including a device class identifier 720. Method 700 may comprise identifying an I/O device coupled to the processor based on the device class identifier 730. Method 700 may comprise providing an output signal to the I/O device, the output signal based on the output message 740. Method 700 may comprise providing a second output signal to a second I/O device, the second output signal based on the output message 750. Method 700 may comprise receiving an input signal from the I/O device, wherein the input signal is to cause the transfer of data via the second data channel 760. Method 700 may comprise providing an event message to an event notification system based on the output message 770.
[0031] 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 or after 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.
[0032] The processor may send a response to the virtual computer after receiving an output message. The response may be an acknowledgement of receipt of the output message or a status on successful, or unsuccessful, handling of the output message, along with an error message. If such acknowledgement is not received, the virtual computer may provide the output message to the processor another time. If the response indicates an error, the virtual computer may record an error message to an error log.
[0033] The output message may cause actions to be taken with regards to multiple I/O devices. For example, if the output message indicates new e-mails are present, the processor may cause the light source for an e-mail button on a keyboard to activate and also play a sound, such as chimes, over a sound system. The output message may specify that both actions are to be taken. In various examples, the output message may indicate that new e-mails are present and the application executed by the processor may process the output message and determine that output signals should be provided to multiple I/O devices.
[0034] The application executed by the processor may cause an event notification based on the output message. For example, the processor may provide event notifications when a VoIP call is incoming. Other applications, such as a call logging application, may register to be notified of such events. The application may provide notifications of such events to registered applications or provide notifications to an event system that aggregates and provides event notifications.
[0035] In various examples, the receipt of an output message may cause the receipt of an input signal from the I/O device and the transfer of data via the second data channel. For example, the processor may receive an output message via the first data channel of an incoming VoIP call. The processor may cause a sound to be played and a light source to activate. A user may press a button to accept the VoIP call, causing the I/O device to provide a signal to the processor. The processor may provide an input message via the first data channel to accept the VoIP call. The processor and virtual computer may use the second data channel to transfer the voice signals for the VoIP call, as well as a video signal. The processor and virtual computer may use a third data channel to transfer the voice signals for the VoIP call, as well as a video signal.
[0036] Fig. 8 shows a computer-readable medium 800 with machine-readable instructions 810, 820, 825, 830, 840 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 the first data channel and a second data channel between the virtual computer and the processor, the second data channel to transfer input/output (I/O) data between the virtual computer and the processor. Machine-readable instruction 820, when executed, may cause the virtual computer to detect an event at the virtual computer. Machine-readable instruction 825, when executed, may cause the virtual computer to receive a device class identifier from the processor via the first data channel, the device class identifier corresponding to an I/O device coupled to the processor. Machine-readable instruction 830, when executed, may cause the virtual computer to provide an output message, comprising the device class identifier, to the processor via the first data channel based on the event. Machine- readable instruction 840, when executed, may cause the virtual computer to register to receive an event notification from an application.
[0037] The virtual computer may have an event notification system for notifying applications of system events or events from other applications. Events may include session shutdown, opening or closing an application, a switch of window focus, availability of new e-mails, an incoming VoIP call, starting or ending of a VoIP call, or various other events. Individual applications may have an event notification system. The virtual computer may execute an application that monitors applications, even if the applications do not have an event notification system. For example, the virtual computer may monitor network traffic associated with an application to determine occurrence of an event, such as starting or ending a VoIP call. The virtual computer may analyze the Ul to detect when a new video or news article is added to web page displaying recent videos or news articles.
[0038] The processor may provide the virtual computer with a set of the processor’s accessible I/O devices. For example, the processor may indicate it has a keyboard with a light source to indicate new e-mails are present, a haptic device that may vibrate, a sound system for headphones, and a sound system for speakers. The virtual computer may send output messages intended for specific devices. The processor may indicate I/O device classes or I/O device functionality. For example, the processor may indicate it has capability to play sounds, but not identify how many sound systems. The processor may indicate it has a light source to indicate the presence of new e-mails, but not indicate it corresponds to any particular I/O device.
[0039] In various examples, the processor may change its interaction with the I/O devices based on an output message and other factors. For example, the output message may indicate a new e-mail is present. If a sound system is being used for a VoIP call, playing music, or playing a video, the processor may decide to activate or flicker a light source. If the sound system is not being used for a VoIP call, playing music, or playing a video, the sound system may play a chime sound. If the user has set the computer system to quiet mode, the processor may cause a haptic device to vibrate instead of playing a sound.
[0040] In various examples, the connection to the virtual computer may be a connection to a remote desktop running on a remote server. The local computer system may have multiple windows open, and the remote desktop window may not have focus. The processor may receive output messages while the remote desktop window does not have focus and provide output signals to I/O devices. The processor may cause the remote desktop window to get focus, bringing it to the forefront of the local user interface. The virtual computer may bring a window corresponding to an event to the forefront of its user interface and give that window focus. The processor may not send output signals to I/O devices based on output messages from the virtual computer, when the remote desktop window does not have focus, or the processor may send certain output signals to I/O devices.

中文:
[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设备;并且向I/O设备提供输出信号,该输出信号基于输出消息。
[0012]在根据本公开的一个示例中,提供了一种方法。该方法包括基于处理器和虚拟计算机之间的连接在处理器和虚拟计算机之间建立第一数据信道,该连接包括处理器和虚拟计算机之间的第二数据信道,第二数据信道在处理器和虚拟计算机之间传递输入/输出(I/O)数据;经由第一数据信道从虚拟计算机接收输出消息,该输出消息包括设备类别标识符;基于设备类别标识符识别耦接到处理器的I/O设备;并且向I/O设备提供输出信号,该输出信号基于输出消息。
[0013]在根据本公开的一个示例中,提供了一种装置。该装置包括存储机器可读指令的非暂时性计算机可读介质,该机器可读指令在由虚拟计算机执行时使虚拟计算机:基于虚拟计算机和处理器之间的连接在虚拟计算机和处理器之间建立第一数据信道,该连接包括虚拟计算机和处理器之间的第二数据信道,该第二数据信道在虚拟计算机和处理器之间传递输入/输出(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可以是膝上型计算机、台式计算机、移动式电话、平板机或其他计算机系统。
[0016]计算机系统110可以包括与I/O设备和数据信道150接合的应用。在本文使用的,应用意欲包含程序、服务、守护程序、设备驱动器、库、可执行体和机器可读指令的其他集合。应用可以检测已经在计算机系统110和诸如在服务器130上执行的虚拟计算机之类的虚拟计算机之间建立了连接140。基于连接140的检测,计算机系统110可以在计算机系统和虚拟计算机之间建立数据信道150。连接140的数据信道和数据信道150可以传递与I/O设备相对应的输入和输出消息两者或甚至向相同的I/O设备传递。服务器130上的虚拟计算机可以包括与数据信道150接合的应用。虚拟计算机的应用可以在虚拟计算机处检测事件并且经由数据信道150向计算机系统110提供输出消息用于与I/O设备交互。计算机系统的应用可以处理那些输出消息。例如,如果虚拟计算机上的应用检测到新的电子邮件存在,则虚拟计算机上的应用可以通过数据信道150提供对应的输出消息。计算机系统的应用可以接收输出消息并且处理输出消息以辨识执行I/O操作的请求。计算机系统的应用可以使计算机系统110激活光源、播放声音或使触觉设备引起振动。激活光源可以意指将光源开启,而去激活光源可以意指将光源关闭。在各个示例中,可以在位置远离计算机系统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可以将用于电子邮件按钮260的光源去激活。当本地计算机系统200连接到虚拟计算机时,虚拟计算机可以不向计算机系统200传递命令来将用于电子邮件按钮260的光源激活或去激活。可以不经由第二数据信道来传递命令,这是因为本地计算机系统200和虚拟计算机之间的连接以及其第二数据信道可能不处理这样的I/O命令。例如,连接可以处理I/O数据,诸如发送回屏幕截图以在监视器上显示,而不是激活诸如指示新的电子邮件存在的光源之类的光源。计算机系统200可以执行包括机器可读指令242、机器可读指令244、机器可读指令246的应用。机器可读指令242在被执行时,可以使处理器210建立数据信道,诸如处理器210和虚拟计算机之间的数据信道。机器可读指令244在被执行时,可以使处理器210基于新的电子邮件的检测经由数据信道从虚拟计算机接收输出消息。机器可读指令244在被执行时,可以使处理器210激活电子邮件按钮的光源以指示新的电子邮件的存在。例如,计算机系统可以基于来自虚拟计算机的输出消息来处理这样的输出消息并且将用于电子邮件按钮260的光源激活或去激活。虚拟计算机可以执行检测这样的事件并且提供这样的输出消息的应用。
[0020]图3示出根据各个示例的具有要由处理器执行的机器可读指令310、机器可读指令320、机器可读指令330、机器可读指令340的计算机可读介质300。计算机可读介质300可以是储存器,诸如硬盘驱动器、固态驱动器(SSD)、闪速存储器或EEPROM。机器可读指令在310被执行时,可以使处理器基于处理器和虚拟计算机之间的连接在处理器和虚拟计算机之间建立第一数据信道,该连接包括处理器和虚拟计算机之间的第二数据信道,该第二数据信道在处理器和虚拟计算机之间传递输入/输出(I/O)数据。机器可读指令320在被执行时,可以使处理器经由第一数据信道从虚拟计算机接收输出消息。机器可读指令330在被执行时,可以使处理器基于输出消息识别耦接到处理器的I/O设备。机器可读指令340在被执行时,可以使处理器基于输出消息来向I/O设备提供输出信号。
[0021]机器可读指令310、机器可读指令320、机器可读指令330、机器可读指令340可以是要由处理器执行的应用的一部分。应用可以检测处理器和虚拟计算机之间的连接。应用可以通过监视在计算机系统上运行的进程和服务并且识别哪些进程或服务可以建立这样的连接来检测连接。如果连接存在,则应用可以通过查询另一个应用来检测连接。应用可以通过监视当创建这样的连接时提供通知的通知系统来检测连接。应用可以通过分析视窗的标题栏或视窗的内容来检测连接。例如,标题栏或视窗可以包括这样的连接的指示,诸如后面是TCP/IP地址的“连接到”。应用也可以监视网络业务以检测连接或确定如何连接到远程虚拟计算机(诸如通过特定TCP/IP地址)。应用也可以基于与用户的交互(诸如用户指定连接到的TCP/IP地址)来建立连接。在各个示例中,处理器和虚拟计算机之间的连接可以允许数据信道的创建。应用可以创建和使用通过连接的数据信道。
[0022]应用可以注册到设备驱动器或其它应用以向I/O设备提供输出信号。输出信号可以是I/O设备能够处理的事件的通知的形式。应用可以基于输出消息的接收来创建输出信号以向I/O设备提供。基于所建立的特定数据信道的细节,输入消息的格式可以不同。输出消息可以包括与I/O设备相对应的设备类别标识符、什么事件发生的指示以及指示事件何时发生的时间戳。应用可以处理输出消息以确定要由I/O设备执行什么动作。输出消息设备类别标识符和要由I/O设备执行的动作,诸如识别光源和激活光源的动作。应用可以是设备驱动栈的一部分或具有作为设备驱动栈的一部分的对应的组件。设备类别标识符可以识别设备的类,诸如具有播放声音或提供照明的能力的声音系统或光源或设备。在各个示例中,设备类别标识符可以与进行照射以指示新的电子邮件的存在的所有设备相对应或者与进行照射的所有设备相对应。输出消息可以包括设备标识符。例如,计算机系统可以包括多个光源。一个光源可以指示新的电子邮件的存在并且另一个指示通过网际协议的语音(VoIP)呼叫是否发生。输出消息可以指定哪个光源应当激活或去激活。一个I/O设备可以具有能够进行输出的多个类似的或单独的元件。键盘可以包括一个光源来指示新的电子邮件的存在并且包括另一个光源来指示VoIP呼叫在发生。输出消息可以包括数据识别I/O设备的特定元件或功能。输出消息可以包括设备标识符识别特定I/O设备。
[0023]图4示出根据各个示例的建立数据信道并且通过数据信道接收数据以向I/O设备提供的方法300。方法400可以包括:基于处理器和虚拟计算机之间的连接在处理器和虚拟计算机之间建立第一数据信道,该连接包括处理器和虚拟计算机之间的第二数据信道,该第二数据信道在处理器和虚拟计算机之间传递输入/输出(I/O)数据410。方法400可以包括经由第一数据信道从虚拟计算机接收输出消息,该输出消息包括设备类别标识符420。方法400可以包括基于设备类别标识符识别耦接到处理器的I/O设备430。方法400可以包括向I/O设备提供输出信号,该输出信号基于输出消息440。
[0024]图5示出根据各个示例的具有要由虚拟计算机执行的机器可读指令510、机器可读指令520、机器可读指令530的计算机可读介质500。机器可读指令510在被执行时,可以使虚拟计算机基于虚拟计算机和处理器之间的连接在虚拟计算机和处理器之间建立第一数据信道,该连接包括虚拟计算机和处理器之间的第二数据信道,该第二数据信道在处理器和虚拟计算机之间传递输入/输出(I/O)数据。机器可读指令520在被执行时,可以使虚拟计算机在虚拟计算机处检测事件。机器可读指令530在被执行时,可以使虚拟计算机:基于事件,经由第一数据信道向处理器提供输出消息。
[0025]机器可读指令510、机器可读指令520、机器可读指令530可以是要由虚拟计算机执行的应用的一部分。为了建立第一数据信道,应用可以监视虚拟计算机和处理器之间的通信,等待来自处理器的建立连接的请求。虚拟计算机上的应用可以发起连接请求。
[0026]在检测事件时,虚拟计算机处的应用可以针对来自操作系统或应用的事件通知进行注册。例如,虚拟计算机处的应用可以注册到电子邮件应用以接收通知,诸如当新的电子邮件存在时。应用可以注册到VoIP应用以在呼叫传入或呼叫结束时接收通知。应用可以注册到应用以在关于新闻或视频馈送的标题或视频可用时接收通知。应用可以注册到操作系统以在高优先级更新可用是接收通知。应用可以注册到独立的应用或可以注册到在虚拟计算机上可用的事件服务。事件服务可以将来自多个源的通知汇集。
[0027]虚拟计算机处的应用可以通过分析类似于用户接口自动化的用户接口来检测事件。例如,可以分析图形用户接口以确定哪些应用程序视窗是打开的并且什么出现。虚拟计算机处的应用可以将视窗辨识为与相对应的VoIP应用并且识别指示呼叫何时传入的接口对象。虚拟计算机处的应用可以分析该接口对象的出现以确定事件是否出现,诸如指示呼叫传入的接口对象。
[0028]图6示出根据各个示例的具有要由处理器执行的机器可读指令610、机器可读指令620、机器可读指令630、机器可读指令640、机器可读指令650、机器可读指令660、机器可读指令670的计算机可读介质600。机器可读指令610在被执行时,可以使处理器基于处理器和虚拟计算机之间的连接在处理器和虚拟计算机之间建立第一数据信道,该连接包括处理器和虚拟计算机之间的第二数据信道,该第二数据信道在处理器和虚拟计算机之间传递输入/输出(I/O)数据。机器可读指令620在被执行时,可以使处理器经由第一数据信道从虚拟计算机接收输出消息。机器可读指令630在被执行时,可以使处理器基于输出消息识别耦接到处理器的I/O设备。机器可读指令640在被执行时,可以使处理器向I/O设备提供输出信号,该输出信号基于输出消息,至I/O设备的输出信号使I/O设备激活光源。机器可读指令650在被执行时,可以使处理器执行虚拟计算机。机器可读指令660在被执行时,可以使处理器基于输出信号从I/O设备接收响应。机器可读指令670在被执行时,可以使处理器基于响应经由第一数据信道向虚拟计算机提供响应消息。
[0029]在各个示例中,可以在处理器上、而不是在远程服务器上执行虚拟计算机。数据信道可以包括虚拟计算机上的函数或进程调用用于在处理器和由处理器执行的虚拟计算机之间传递数据。
[0030]图7示出根据各个示例的建立数据信道并且通过数据信道接收数据以向I/O设备提供的方法700。方法700可以包括基于处理器和虚拟计算机之间的连接在处理器和虚拟计算机之间建立第一数据信道(包括经由网络接口进行通信),该连接包括处理器和虚拟计算机之间的第二数据信道,该第二数据信道在处理器和虚拟计算机之间传递输入/输出(I/O)数据710。方法700可以包括经由第一数据信道从虚拟计算机接收输出消息,该输出消息包括设备类别标识符720。方法700可以包括基于设备类别标识符识别耦接到处理器的I/O设备730。方法700可以包括向I/O设备提供输出信号,该输出信号基于输出消息740。方法700可以包括向第二I/O设备提供第二输出信号,该第二输出信号基于输出消息750。方法700可以包括从I/O设备接收输入信号,其中,输入信号使得经由第二数据信道来传递数据760。方法700可以包括基于输出消息来向事件通知系统提供事件消息770。
[0031]连接可以包括第一数据信道和第二数据信道两者。可以首先建立连接。可以作为建立连接的一部分或在建立连接之后来建立第二数据信道。可以在检测到连接之后稍后建立第一数据信道。可以通过使用建立第一数据信道的连接的功能来建立第一数据信道。例如,连接可以利用远程桌面应用,该远程桌面应用可以允许创建用于传递数据的虚拟信道。可以通过经由远程桌面应用创建虚拟信道来建立第一数据信道。
[0032]处理器可以在接收到输出消息之后向虚拟计算机发送响应。响应可以是与错误消息一起的对输出消息的接收的确认或关于输出消息的成功、不成功、处理的状态。如果没有接收到这样的确认,虚拟计算机可以在另一个时间向处理器提供输出消息。如果响应指示错误,则虚拟计算机可以将错误消息记录到错误日志。
[0033]输出消息可以使得关于多个I/O设备采取动作。例如,如果输出消息指示新的电子邮件存在,则处理器可以使用于键盘上的电子邮件按钮的光源激活并且也通过声音系统播放诸如鸣响之类的声音。输出消息可以指定采取两个动作。在各个示例中,输出消息可以指示新的电子邮件存在,并且由处理器执行的应用可以处理输出消息并且确定应当向多个I/O设备提供输出信号。
[0034]由处理器执行的应用可以基于输出消息而引起事件通知。例如,当VoIP呼叫传入时,处理器可以提供事件通知。诸如呼叫记录应用之类的其它应用可以注册以便被通知这样的事件。应用可以向注册的应用提供这样的事件的通知或向事件系统提供通知,该事件系统汇集并且提供事件通知。
[0035]在各个示例中,输出消息的接收可以引起对来自I/O设备的输入信号的接收以及经由第二数据信道来传递数据。例如,处理器可以经由传入的VoIP呼叫的第一数据信道来接收输出消息。处理器可以使使得播放声音并且激活光源。用户可以按压按钮来接受VoIP呼叫,使得I/O设备向处理器提供信号。处理器可以经由第一数据信道提供输入消息以接受VoIP呼叫。处理器和虚拟计算机可以使用第二数据信道来传递用于VoIP呼叫的语音信号以及视频信号。处理器和虚拟计算机可以使用第三数据信道来传递用于VoIP呼叫的语音信号以及视频信号。
[0036]图8示出根据各个示例的、具有要由虚拟计算机执行的机器可读指令810、820、825、830、840的计算机可读介质800。机器可读指令810在被执行时,可以使虚拟计算机基于虚拟计算机和处理器之间的连接在虚拟计算机和处理器之间建立第一数据信道,该连接包括虚拟计算机和处理器之间的第一数据信道和第二数据信道,该第二数据信道在虚拟计算机和处理器之间传递输入/输出(I/O)数据。机器可读指令820在被执行时,可以使虚拟计算机在虚拟计算机处检测事件。机器可读指令825在被执行时,可以使虚拟计算机经由第一数据信道从处理器接收设备类别标识符,该设备类别标识符对应于耦接到处理器的I/O设备。机器可读指令830在被执行时,可以使虚拟计算机基于事件,经由第一数据信道向处理器提供包括设备类别标识符的输出消息。机器可读指令840在被执行时,可以使虚拟计算机注册以从应用接收事件通知。
[0037]虚拟计算机可以具有用于向应用通知系统事件或来自其它应用的事件的事件通知系统。事件可以包括会话关闭、打开或关闭应用、视窗焦点的切换、新的电子邮件的可用性、传入的VoIP呼叫、VoIP呼叫的开始或结束或各种其他事件。独立的应用可以具有事件通知系统。虚拟计算机可以执行监视应用(即使应用不具有事件通知系统)的应用。例如,虚拟计算机可以监视与应用相关联的网络业务以确定事件的发生,诸如开始或结束VoIP呼叫。虚拟计算机可以分析UI以检测新的视频或新闻标题何时被添加到显示最近的视频或新闻文章的web页面。
[0038]处理器可以向虚拟计算机提供处理器可访问的一组I/O设备。例如,处理器可以指示其具有利用光源指示新的电子邮件存在的键盘、可以振动的触觉设备、用于耳机的声音系统以及用于扬声器的声音系统。虚拟计算机可以发送预定给特定设备的输出消息。处理器可以指示I/O设备类别或I/O设备功能。例如,处理器可以指示其具有播放声音的能力,但没有识别多少声音系统的能力。处理器可以指示其具有指示新的电子邮件的存在但不指示其对应于任何特定I/O设备的光源。
[0039]在各个示例中,处理器可以基于输出消息和其他因素来改变其与I/O设备的交互。例如,输出消息可以指示新的电子邮件存在。如果声音系统被用于VoIP呼叫、播放音乐或播放视频,则处理器可以决定激活光源或使光源闪烁。如果声音系统没有用于VoIP呼叫、播放音乐或播放视频,则声音系统可以播放鸣响声音。如果用户已经将计算机系统设置为静音模式,则处理器可以使触觉设备振动而非播放声音。
[0040]在各个示例中,至虚拟计算机的连接可以是至在远程服务器上运行的远程台式机的连接。本地计算机系统可以使多个视窗打开,并且远程桌面视窗可以不具有焦点。处理器可以在远程桌面视窗不具有焦点时接收输出消息并且向I/O设备提供输出信号。处理器可以使远程桌面视窗得到焦点(focus),将其带到本地用户接口的最前方。虚拟计算机可以将对应于事件的视窗带到其用户接口的最前方并且给出该视窗焦点。当远程桌面视窗不具有焦点时,处理器可以基于来自虚拟计算机的输出消息不向I/O设备发送输出信号或处理器可以向I/O设备发送特定输出信号。