ebHID,WebNFC和WebUSB开辟了新的途径,可以与用户用于Web应用程序的设备硬件进行交互。
你是否遇到过需要访问用户的设备硬件,并只为该功能实现一个桌面应用程序?你并不孤单。直到最近,实现上述目的的方式还很牵强和麻烦。然而,随着最近Chrome DevTools的更新,使用JavaScript与硬件对话已经成为现实。
因此,在本文中,我将介绍三个新的JavaScript API,即WebHID,WebNFC和WebUSB可用于设备硬件访问。让我们分别看一下这些技术。
在将HID(人机界面设备)集成到软件中时,开发人员面临的一个主要问题是,软件应适应大量的品种;旧设备、新设备、常见的型号、不常见的型号等。
WebHID通过提供一个在JavaScript中实现设备特定逻辑的API来解决这个问题。
基本上,如果你想用任天堂Switch的Joy-Con控制器玩Chrome Dino??离线游戏,WebHID使你有可能做到这一点。很酷,不是吗?
你可以使用下面的代码片段来了解是否支持WebHID。
if ("hid" in navigator) { /* The WebHID API is supported. */ }
应用程序实施WebHID连接设备后,将显示以下提示。
你需要做的是,选择正确的设备并点击连接。就这么简单!
WebHID API是异步的。因此,在等待新设备连接或输入时,它不会阻止UI。
我相信这是在发现WebHID能做什么之后想到的事情。
该API的开发采用了《控制对强大的网络平台功能的访问》中定义的核心原则,包括用户控制、透明度和人体工程学。此外,一次仅允许一个HID设备连接。
此外,Chrome DevTools通过提供浏览器所连接的设备的日志,使其更容易调试与设备的连接。这可以在chrome://device-log(Chrome的一个内部页面)查看。
WebHID目前在桌面上被Chrome和Edge支持。
接下来让我们看一下WebNFC。
我相信,你以前一定遇到过NFC(近场通信)这个缩写。
有了WebNFC,现在你可以读取或写入NFC标签,当它在你的设备范围内。这是通过NDEF (NFC数据交换格式)完成的,它是由NFC标签格式支持的。
使用WebNFC
比方说,你需要管理你店里的库存。你可以用WebNFC建立一个库存管理网站,它可以将数据读/写到你库存的NFC标签上。
可能性是无穷的。这是一个将许多事情自动化的机会,使我们的日常工作更有效率。
与WebHID相似,你可以使用下面的代码片段检查WebNFC支持。
if ('NDEFReader' in window) { /* Scan and write NFC tags */ }
安全注意事项
作为一项安全预防措施,Web NFC仅适用于顶级框架和安全浏览环境(仅HTTPS)。
如果实现WebNFC的网页消失或不可见,所有与NFC标签的连接将被暂停。当页面再次变得可见时,这些将被恢复。页面可见性API(Page Visibility API)帮助你识别NFC操作的连接状态。
浏览器兼容性
到目前为止,Chrome Android仅支持WebNFC。
接下来,让我们一起看看WebUSB API。
WebUSB API允许你使用JavaScript与USB端口通信,从Chrome 61开始可用。
然而,你可能会想,我们如何访问每个USB设备的相关驱动程序,对吗?在WebHID API的支持下,它允许硬件制造商为其硬件设备建立跨平台的JavaScript SDK。
与上面讨论的API类似,对WebUSB的支持可以用下面的代码片断来检测。
if ("usb" in navigator) { /* The WebUSB API is supported. */ }
在安全方面有许多控制措施来保护未经授权的USB访问,而且它只在支持HTTPS的安全上下文中工作,以保护传输中的任何数据。此外,标准的浏览器同意程序是用来请求和授予访问权的。
调试WebUSB API相关的任务也可以通过内部的chrome://device-log页面进行,该页面列出所有连接的USB设备和相关的事件。
WebUSB得到了Chrome浏览器、桌面上的Edge和安卓设备上的Chrome的支持。
有关WebUSB API的更多详细信息,可以参考Web上的访问USB设备。
文译自:How To Find Hardware Specifications On Linux
译者:开源视界
校对:OpenView
原文链接:https://www.ostechnix.com/getting-hardwaresoftware-specifications-in-linux-mint-ubuntu/
原文遵循 CC BY-NC 4.0 协议
BY SK · PUBLISHED AUGUST 1, 2019 · UPDATED AUGUST 2, 2019
有许多工具可用于在Linux系统上查询硬件规格。这里,我列出了四个主要的常被用于获取Linux上几乎所有硬件(和软件)信息的工具。好消息是这些工具在一些Linux发行版上已经默认预装好了。我在Ubuntu 18.04 LTS桌面系统上对这些工具进行了测试,然而它们在其它Linux发行版上也能工作良好。
Lshw (Hardware Lister)是一个简单但具有完整功能特性的工具,其能够在Linux系统上提供详细的硬件配置。它能够报告出精确地内存配置、硬件版本、主板配置、CPU版本和速度、缓存配置和总线速度等。信息可以以纯文本、XML或者HTML的形式导出。
其目前支持DMI(X86 和 EFI),开源固件设备树(只包括PowerPC),PCI/AGP,ISA PnP(x86),CPUID(x86),IDE/ATA/ATAPI,PCMCIA(只在x86上进行过测试),USB和SCSI。
如我所讲,lshw在Ubuntu上已经默认安装好了。如果它在你的Ubuntu系统上没有安装,可以使用下面的命令进行安装:
$ sudo apt install lshw lshw-gtk
在其它Linux发行版上,比如Arch Linux,运行:
$ sudo pacman -S lshw lshw-gtk
一旦安装完成,运行lshw来查询你的系统硬件信息:
$ sudo lshw
你将看到你的系统的硬件规格的详细输出。
输出示例:
在Linux上使用lshw查找硬件规格
一定要注意,如果你没有用sudo权限来运行lshw命令,输出可能是不完整或者不准确的。
Lshw能够以HTML页面来显示输出,要达成次目的,使用:
$ sudo lshw -html
同样的,我们可以以XML和json格式输出设备数,就像下面一样:
$ sudo lshw -xml $ sudo lshw -json
要输出显示了硬件路径的设备树,使用-short选项:
$ sudo lshw -short
使用lshw显示带有路径的设备树
要列出设备及其总线信息,详细的SCSI、USB、IDE和PCI地址等,运行:
$ sudo lshw -businfo
默认上,lshw会显示所有硬件信息。你也可以通过Class选项来查看特定硬件的信息,比如处理器,内存,显示器等。class选项可以通过lshw -short或者lshw -businfo命令来找到。
要显示特定硬件的信息,例如处理器,运行:
$ sudo lshw -class processor
输出示例:
*-cpu description: CPU product: Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz vendor: Intel Corp. physical id: 4 bus info: cpu@0 version: Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz serial: To Be Filled By O.E.M. slot: CPU 1 size: 913MHz capacity: 2300MHz width: 64 bits clock: 100MHz capabilities: x86-64 fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm arat pln pts md_clear flush_l1d cpufreq configuration: cores=2 enabledcores=1 threads=2
类似的,我们可以使用下面的命令获取系统信息:
$ sudo lshw -class system
获取硬盘信息:
$ sudo lshw -class disk
获取网络信息:
$ sudo lshw -class network
获取内存信息:
$ sudo lshw -class memory
同样,我们可以像下面这样列出多个硬件设备的信息.
$ sudo lshw -class storage -class power -class volume
如果你同时想要查看带有硬件路径的信息,只需要添加-short选项即可.
$ sudo lshw -short -class processor
输出:
H/W path Device Class Description ======================================================= /0/4 processor Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz
有时,你可能想要向某人分享你的硬件信息,例如客户。如果是这样,你可以移除潜在的敏感信息,比如IP地址,序列号等。
$ lshw -sanitize
Lshw-gtk GUI 工具
如果你不适应使用命令行,你可以使用lshw-gtk,它是lshw命令行工具的图形接口。可以直接从终端或者Dash中打开。
要从终端打开,简单执行:
$ sudo lshw-gtk
下图是lshw工具的默认GUI界面.
在Linux上使用lshw-gtk查找硬件信息
双击"Portable Computer"来进一步展开它.
在Linux上使用lshw GUI来获取硬件信息
你可以继续双击后续的硬件标签来得到信息。
欲了解更多信息,参见manpage。
$ man lshw
Inxi是另一个我很喜欢的工具,可以获取Linux系统上几乎所有的信息。它是一个自由,开源且功能完整的命令行系统信息工具。它可以获取系统硬件,CPU,驱动,Xorg,桌面,内核,GCC版本,处理器,内存占用等许多有用的信息。无论是硬盘还是CPU,主板韩式整个系统的所有信息,inxi都会很快为你精确地呈现出来。由于它是一个命令行工具,你可以在桌面或者服务器上使用它。欲了解更多信息,参见下面这篇文章(也是本号曾翻译过的文章)。
使用inxi来获得Linux系统详细信息
Hardinfo会同时为你获取系统的硬件和软件信息,后者是在lshw中不能获取的。
HardInfo可以获取你的系统的硬件和操作系统性能基准测试,并以HTML或者纯文本形式产生可以打印的报告。
如果Hardinfo没有在你的Ubuntu中安装,通过下面的命令来安装它:
$ sudo apt install hardinfo
一旦安装完成,HardInfo工具可以从菜单或者终端启动。
下面是HardInfo的默认界面
在Linux上使用HardInfo获取硬件信息
如你所见,Hardinfo具有简洁只管的GUI界面。
所有的硬件信息被分组为四个主要的组,即Computer,Devices,Network,和Benchmarks。每个组展示了特定的硬件信息。
例如,要查看处理器信息,点击"Devices"组下面的Processor选项即可。
使用Hardinfo获取处理器信息
与lshw不同,Hardinfo可以帮助你获取基本的软件信息,比如操作系统,内核模块,本地化,文件系统使用,用户/群组,以及开发工具等。
使用Hardinfo展示系统信息
Hardinfo的另一个值得注意的特性是,其允许我们对CPU和FPU能力以及部分图形显卡能力进行简单的基准测试。
Hardinfo进行性能基准测试
使用inxi来获得Linux系统详细信息
Ubuntu中如何在插入外部鼠标时自动禁用触摸板
查询Linux发行版名字、版本和内核信息
在Linux上如何校验ISO镜像文件
我们可以从整个系统生成报告也可以只从单个设备生成报告。
要生成报告,简单点击"Generate Report"按钮并选择你想要在报告中包含的信息即可。
使用Hardinfo生成系统报告
Hardinfo也有一些命令行选项。
例如,要产生报告并在终端商进行展示,可以运行:
$ hardinfo -r
列出模块信息:
$ hardinfo -l
欲了解更多信息,参见manpage
$ man hardinfo
Sysinfo是另一个HardInfo和lshw-gtk工具的替代平,其可以被用来获取如下所列出的硬件和软件信息:
让我们使用命令安装sysinfo:
$ sudo apt install sysinfo
Sysinfo可以从终端或者Dash中启动。
要从终端中启动它,运行:
$ sysinfo
下面是Sysinfo工具的默认界面。
sysinfo界面
如你所见,所有的硬件(和软件)信息被分组为5个种类,即System, CPU, Memory, Storage和Hardware。点击一个类别,可以在导航栏中获取各自的信息。
使用Sysinfo在Linux上获取硬件信息
欲了解更多信息,参见manpage。
$ man sysinfo
好了,这就是所有内容了。就像我已经提到的,可能有许多工具都可以用于显示硬件/软甲信息。然而,这四个工具对于获取你的Linux发行版的信息来说已经绰绰有余了。
Linux下挂载使用Windows的NTFS分区
Linux使用图形界面连接WiFi
Linux中使用snap和flatpak来安装和管理应用程序
Linux下常用的图形应用下载工具
Linux下制作系统的U盘启动盘
使用inxi来获得Linux系统详细信息
Ubuntu中如何在插入外部鼠标时自动禁用触摸板
查询Linux发行版名字、版本和内核信息
在Linux上如何校验ISO镜像文件
如何迅速方便地在Ubuntu 18.04中配置IP地址
喜欢使用Linux办公、学习、hack的朋友们可以点击关注小编,小编将竭力提供更多内容给大家交流~
avaScript本身不提供直接访问串口的功能。然而,可以使用Web API和JavaScript与串口进行通信,一般需要在浏览器环境中进行。
const port = await navigator.serial.requestPort();
await port.open({ baudRate: 9600 });
使用Web Serial API进行串口通信需要在浏览器环境中运行,并且通常需要用户授权。不是所有浏览器都支持Web Serial API,而且它主要用于Web应用程序,而不是传统的本地JavaScript应用程序。
// 请求串口访问权限
async function requestSerialAccess() {
try {
const port = await navigator.serial.requestPort();
await port.open({ baudRate: 9600 }); // 打开串口连接
// 读取数据
const reader = port.readable.getReader();
while (true) {
const { value, done } = await reader.read();
if (done) {
break;
}
// 处理从串口读取的数据
console.log(value);
}
// 关闭串口连接
await port.close();
} catch (error) {
console.error("Error:", error);
}
}
// 添加事件监听器,用于在用户点击按钮时请求串口访问权限
const connectButton = document.getElementById("connect-button");
connectButton.addEventListener("click", requestSerialAccess);
首先我们创建了一个函数requestSerialAccess(),它请求串口访问权限,打开串口连接,然后使用一个循环来不断读取数据,将数据输出到控制台。最后,它在完成后关闭串口连接。
*请认真填写需求信息,我们会在24小时内与您取得联系。