日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

USBHID学习

發(fā)布時(shí)間:2023/12/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 USBHID学习 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

USBHID學(xué)習(xí)

  • 前言
  • 第一步:準(zhǔn)備一個(gè)列表,里面有我們目前所有的USB設(shè)備名稱
  • 第二步:通過列表,反向獲取沒被我們定義到的id號
  • 第三步:獲取所有的剩余id,并把他們存放到一個(gè)數(shù)組中方便調(diào)用.之后在循環(huán)中設(shè)置對應(yīng)值
  • 多出來的第四步...

前言

之前寫過一個(gè)類似的,shell觸發(fā)調(diào)用python腳本,也是為了將新接入的鍵鼠全部屏蔽.代碼如下:

import os # xinput_list = os.popen("xinput --list") # print(xinput_list.read())xinput_list = os.popen("xinput --list|grep Keyboard|awk -F= '{print $2}'|awk '{print $1}'") # print(xinput_list.read())keyboard_list = [] for i in xinput_list:keyboard_list.append(int(i))xinput_list = os.popen("xinput --list|grep Mouse|awk -F= '{print $2}'|awk '{print $1}'") for i in xinput_list:keyboard_list.append(int(i))while keyboard_list:i = keyboard_list.pop()print(i)os.system(f"xinput --set-prop {i} 'Device Enabled' 0")

但是也能看到,實(shí)際上是檢測了xinput名稱中的"Keyboard"和"Mouse"兩個(gè)字段來實(shí)現(xiàn)的,不具有通用性,而且這玩意一運(yùn)行…別想著接入鍵鼠改回來了,所以準(zhǔn)備重寫一個(gè)白名單機(jī)制的腳本.這次就直接去shell了.

保持目前的設(shè)備usb設(shè)備,當(dāng)有其他名稱的設(shè)備加入時(shí),直接禁用它.由于沒找到白名單策略,只能自己寫了

另:下面順序會(huì)相當(dāng)混亂,碰見什么坑就寫啥,因?yàn)閟hell腳本語言基本沒用過

第一步:準(zhǔn)備一個(gè)列表,里面有我們目前所有的USB設(shè)備名稱

靜態(tài)寫入對應(yīng)的usb白名單設(shè)備,并嘗試將其打印出來

#!/bin/bashSLEEP_TIME=5 USB1="Logitech Gaming Mouse G402" USB2="H264 USB Camera: USB Camera" USB3="SINO WEALTH USB KEYBOARD" USB_HID_WHITE=("$USB1" "$USB2" "$USB3")for i in "${USB_HID_WHITE[@]}";doecho "$i" done ------------------- 打印: (glh) adocir@adocir:~/PycharmProjects/glh$ /bin/bash /home/adocir/PycharmProjects/glh/test.sh Logitech Gaming Mouse G402 H264 USB Camera: USB Camera SINO WEALTH USB KEYBOARD

使用傳遞字符串參數(shù)來給列表定義,列表的值以空格分離.注意,傳遞參數(shù)的時(shí)候存在三種傳遞方式:

  • $var
  • ${var}
  • “$var”
    但請注意前兩種會(huì)把字符串中的空格去掉.
    原因在于1和2中都先進(jìn)行了取值運(yùn)算,得出結(jié)果a b c,然后把它傳給了echo;
    而3中""是一種引用。引用指將字符串用引用符號引起來,以防止特殊字符被shell腳本重解釋為其他意義。使用引用的方法讓它里面的特殊字符“空格”不要被解釋為其他的亂七八糟的東西。
  • 到這里成功定義了白名單列表.

    第二步:通過列表,反向獲取沒被我們定義到的id號

    直接就想到grep -v這個(gè)參數(shù)了唄.grep是選擇,grep -v是反向選擇
    另外,``這個(gè)是真的好用

    #!/bin/bashSLEEP_TIME=5 USB1="Logitech Gaming Mouse G402" USB2="H264 USB Camera: USB Camera" USB3="SINO WEALTH USB KEYBOARD" USB_HID_WHITE=("$USB1" "$USB2" "$USB3")USBHID_VAR=$(xinput list) # 獲取列表echo "$USBHID_VAR" for i in "${USB_HID_WHITE[@]}";doecho "$i" # echo "$usbhid_var"|grep -v "$i"USBHID_VAR=`echo "$USBHID_VAR"|grep -v "$i"` # echo "$usbhid_var" done USBHID_VAR=`echo "$USBHID_VAR"|grep -v "master pointer"` USBHID_VAR=`echo "$USBHID_VAR"|grep -v "master keyboard"` echo "$USBHID_VAR"

    依舊是xinput list獲取所有設(shè)備,在for循環(huán)中按序grep -v反向取值,最后打印出來的剩余字段就是我們所篩選出來的(記得把master pointer給剔出掉,總線你不能禁用啊).

    第三步:獲取所有的剩余id,并把他們存放到一個(gè)數(shù)組中方便調(diào)用.之后在循環(huán)中設(shè)置對應(yīng)值

    還能咋,取值啊,設(shè)置啊.順便把語法規(guī)范一下

    #!/bin/bashsleep 3 # 定義白名單設(shè)備名 USB1="Logitech Gaming Mouse G402" USB2="H264 USB Camera: USB Camera" USB3="SINO WEALTH USB KEYBOARD" USB_HID_WHITE=("$USB1" "$USB2" "$USB3") # 添加白名單設(shè)備名USBHID_VAR=$(xinput list) # 獲取列表echo "$USBHID_VAR" for i in "${USB_HID_WHITE[@]}";doecho "$i" # echo "$usbhid_var"|grep -v "$i"USBHID_VAR=$(echo "$USBHID_VAR"|grep -v "$i") # echo "$usbhid_var" done USBHID_VAR=$(echo "$USBHID_VAR"|grep -v "master pointer") USBHID_VAR=$(echo "$USBHID_VAR"|grep -v "master keyboard") echo "$USBHID_VAR"HID_NUM=$(echo "$USBHID_VAR"|awk -F= '{print $2}'|awk '{print $1}') echo "$HID_NUM" for i in "${HID_NUM[@]}";doecho "$i"xinput --set-prop "$i" 'Device Enabled' 0 done

    上機(jī)測試,手動(dòng)運(yùn)行測試ok,接下來自動(dòng)化就行了

    多出來的第四步…

    本來吧,鍵鼠類的usb設(shè)備,會(huì)被ubuntu識別為一個(gè)hidraw設(shè)備,只需要在/etc/udev/rules.d文件夾中自定義一個(gè)規(guī)則,例如KERNEL=="hidraw*", RUN+="/home/adocir/test.sh",就可以在插入鍵鼠時(shí)觸發(fā)這段shell腳本,從而達(dá)到自動(dòng)化的目標(biāo).但是不知道為啥,寫入這段調(diào)試的時(shí)候,發(fā)現(xiàn)shell腳本確實(shí)如預(yù)期一樣觸發(fā)了,但是xinput沒有任何值返回???已測試和權(quán)限、~/.bashrc等無關(guān),迫不得已,只能另寫一個(gè)循環(huán)調(diào)用的腳本,并在gnome-session-properties中進(jìn)行調(diào)用…如果哪位大神知道是為什么請指教一下

    總結(jié)

    以上是生活随笔為你收集整理的USBHID学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。