新聞中心
隨著計算機技術和網絡科技的不斷發(fā)展,Linux作為一種類Unix操作系統(tǒng),在服務器方面、嵌入式設備方面和桌面環(huán)境方面都有著廣泛的應用。在使用Linux操作系統(tǒng)時,我們往往需要操作鼠標,但是有時候我們可能需要模擬鼠標操作,這時候我們可以。

一、USB鼠標簡介
先來介紹一下USB鼠標。USB鼠標是目前常用的一種外接鼠標,使用USB接口連接電腦,相較于傳統(tǒng)的串口鼠標和PS/2接口的鼠標,其特點是數據傳輸快,傳輸的數據實時性好,操作速度快,目前主流的操作系統(tǒng)都能支持USB鼠標。
二、Linux模擬USB鼠標的方法
在Linux環(huán)境中,我們可以通過模擬USB鼠標的方法來實現類似于鼠標的操作。其中,主要有兩種實現方式:一種是使用內核模塊uhid(User-space Human Interface Device),另外一種是使用X11協(xié)議擴展XTEST。
1. 使用內核模塊uhid實現USB鼠標
uhid是一個Linux內核提供的一種驅動機制,通過它我們可以在用戶空間中創(chuàng)建一個虛擬的輸入設備,而這個虛擬的輸入設備可以在程序中控制的方式下,模擬USB鼠標的操作。
具體來說,實現方法如下:
(1)安裝uhid模塊
在Linux環(huán)境中,uhid模塊默認是不加載,因此我們需要手動安裝它。安裝方法如下:
sudo modprobe uhid
如果uhid模塊安裝成功,那么我們可以使用以下命令查看是否安裝成功:
lod | grep uhid
(2)創(chuàng)建一個虛擬設備
在Linux下,我們可以使用/dev/input/eventX文件來表示輸入設備。在這個文件上進行讀寫操作,就可以模擬鼠標、鍵盤等操作。我們可以使用以下命令來創(chuàng)建一個虛擬設備:
sudo su
echo 1 > /sys/module/uhid/parameters/uhid_max_hidraw
mknod /dev/uhid c 10 $(grep uhid /proc/devices | awk ‘{print $1}’)
chmod 666 /dev/uhid
如果您想要修改設備的屬性,可以使用以下命令:
echo “NAME =\”test\”” > /etc/udev/rules.d/90-test.rules
echo “MODE =\”0666\”” >> /etc/udev/rules.d/90-test.rules
echo “ACTION =\”add\”” >> /etc/udev/rules.d/90-test.rules
echo “SYMLINK =\”uhiddev\”” >> /etc/udev/rules.d/90-test.rules
(3)使用虛擬設備模擬USB鼠標操作
使用虛擬設備模擬USB鼠標操作的程序可以使用C語言編寫,其核心代碼如下:
int fd = open(DEV_NAME, O_RDWR);
if(fd
perror(“Unable to open device”);
return 1;
}
struct uhid_event ev;
memset(&ev, 0, sizeof(struct uhid_event));
ev.type = UHID_INPUT_REPORT;
ev.size = 3;
ev.u.input.usage_page = 0x01;
ev.u.input.usage = 0x02;
ev.u.input.raw[0] = 0x01; // buttons: left
ev.u.input.raw[1] = dx; // dx
ev.u.input.raw[2] = dy; // dy
write(fd, &ev, sizeof(struct uhid_event));
close(fd);
注意,這里的DEV_NAME為您創(chuàng)建的虛擬設備的設備節(jié)點名稱。
2. 使用X11協(xié)議擴展XTEST實現USB鼠標
XTEST是X11協(xié)議提供的一種擴展,可以在Linux系統(tǒng)下模擬鍵盤和鼠標等多種操作。其中,XTEST的核心代碼如下:
Display *display = XOpenDisplay(NULL);
XTestFakeMotionEvent(display, -1, x, y, 0);
XTestFakeButtonEvent(display, Button1, True, 0);
XTestFakeButtonEvent(display, Button1, False, 0);
XFlush(display);
XCloseDisplay(display);
注意,其中的x和y表示鼠標坐標。
三、
通過上述介紹,我們可以發(fā)現,操作并不是一件很難的事情。我們可以通過使用內核模塊uhid或者X11協(xié)議擴展XTEST來實現。盡管這些方案在使用上可能略有不同,但其核心思路都是類似的,即在用戶空間中模擬USB鼠標的操作。當我們需要實現類似于鼠標的功能時,可以根據實際需要,找到一種適合自己的方式來實現。
相關問題拓展閱讀:
- 寫個u鼠標或鍵盤驅動需要哪些知識,linux為平臺
寫個u鼠標或鍵盤驅動需要哪些知識,linux為平臺
首先需要了解Linux輸入子系統(tǒng),因為鼠標是輸入設備,一種input_device。然后需伏高要了解USB設備驅動。使用了USB接橡段口,urb來獲得鼠標的數據,然后把數據往上層應用提交??梢詤⒖磧群艘呀浻械腢SB鼠標驅動,位置是\linux-3.0.86\drivers\hid\uhid\umouse.c。linux-3.0.86是Linux內核的根目錄。并不難。至于哪些書,可以看‘Linux設備驅動程序’這缺如尺本書,里頭主要知識都有講到。
需要多種框架相結合:字符設備驅動框架 + 鼠標驅動框架
關于linux u 鼠標 模擬的介紹到此就結束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。
香港服務器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網服務提供商,擁有超過10年的服務器租用、服務器托管、云服務器、虛擬主機、網站系統(tǒng)開發(fā)經驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務器、香港云服務器、免備案服務器等。
網站標題:使用Linux模擬USB鼠標(linuxu鼠標模擬)
轉載來于:http://www.5511xx.com/article/cddeodj.html


咨詢
建站咨詢
