![](/img/trans.png)
[英]how to get the details of USB devices connected to computer using java
[英]How to enumerate connected USB storage devices Ubuntu Java
我有一個應用程序,主要是Java語言的應用程序,它通過網頁GUI(由Ubuntu計算機提供)來控制機載紅外攝像機,該GUI在計算機加電並在啟動結束時自動運行。 該應用程序以用戶而不是root身份運行,即使該用戶未登錄也是如此。
收集了大量圖像后,需要使用rsync將數據存檔到操作員的USB驅動器上的文件夾中。 我需要安裝USB驅動器並知道其名稱標簽。 計算機是無頭的,在任何情況下都不能指望飛機上的操作員知道Linux。
在Ubuntu上,我看到已登錄並正在運行xfce4 GUI,只有在那時,驅動器才會在/ media / user-name / drive-tag中列出(我注意到/ media / username由root擁有,但文件夾名為該驅動器歸用戶所有。)並顯示在/ etc / mtab中:
/dev/sdd1 /media/programmer/DATA-02-2TB vfat rw,nosuid,nodev,uid=1001,gid=1001,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2 0 0
如何通過Java或Java與bash的組合來檢測和安裝USB存儲設備?
如果不可能,我是否需要通過GUI要求用戶輸入設備標簽或名稱,例如“ DATA-02-2TB”,然后創建安裝點並通過腳本使用信息安裝USB驅動器以上?
首先安裝usbmount,一個Ubuntu工具。
sudo apt-get update
sudo apt-get install usbmount
然后編輯/etc/usbmount/usbmount.conf文件:
sudo sed -i 's/MOUNTOPTIONS="/MOUNTOPTIONS="user,umask=000,/' /etc/usbmount/usbmount.conf
在Serverfault中描述了這些步驟。 請注意,僅支持一部分驅動器格式,包括無處不在的VFAT。
這樣,USB外部驅動器和拇指驅動器將通過/ media / usb7以/ media / usb0的形式安裝在/ media中,並列在/ etc / mtab中。
/dev/sdc1 /media/usb0 vfat rw,noexec,nosuid,nodev,sync,noatime,nodiratime,umask=000 0 0
我已經在14.04機器上對此進行了測試。 現在,如果我只能得到驅動器標簽。
編輯: 同步選項不適用於閃存驅動器。 閱讀/etc/usbmount/usbmount.conf文件以獲取詳細信息,並從該文件中相應的行中刪除“ sync”。 在取消同步之前,使用同步選項進行的完整備份運行了一個多小時,但刪除同步后僅花費了大約5分鍾。 請注意有關使用pumount卸載非同步驅動器的注釋。
public static ArrayList<String> usbDriveList() throws FileNotFoundException {
final String MTB_ADDRESS = "/etc/mtab";
final String TARGET = "^/media/usb[0-7]$"; // REGEX
final File file = new File(MTB_ADDRESS);
final ArrayList<String> driveList = new ArrayList<String>();
try (Scanner in = new Scanner(file)) {
while (in.hasNext()) {
final String[] splitLine = in.nextLine().split(" ");
if (splitLine[1].matches(TARGET)) {
driveList.add(splitLine[1]); // got it!
}
}
} catch (final FileNotFoundException e) {
throw new FileNotFoundException();
}
return driveList;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.