我有一个应用程序,主要是Java和#39;通过网页GUI(由Ubuntu机器提供服务)控制机载红外摄像机,当计算机通电并接通启动时,它自动开始运行。即使用户未登录,应用程序也以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驱动器?
答案 0 :(得分:0)
首先安装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 / usb0 / media / usb7安装在/ 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;
}