#node.js #system-information
#node.js #информация о системе
Вопрос:
Я использую Ubuntu в vmware. Я пытаюсь получить серийный номер базовой платы.
var si = require("systeminformation");
console.log(si.baseboard().serial);
Он возвращает undefined. Проблема в моем коде? Или проблема в том, что ubuntu работает в vmware?
Ответ №1:
Вы можете видеть здесь в systeminformation
исходном коде, что он считывает файл /sys/devices/virtual/dmi/id/board_serial
(если запуск dmidecode -t 2 2>/dev/null
завершается неудачей).
Если вы cat /sys/devices/virtual/dmi/id/board_serial
используете свою оболочку (если она вообще существует), что вы получаете?
Если он пустой или вообще не существует, значит, данные не предоставлены вашей средой.
Комментарии:
1. Спасибо. /sys/devices/virtual/dmi/id/board_serial не существует. И я нахожу, что причина, по которой файл не существует, заключается в том, что это виртуальная машина. Большое спасибо
Ответ №2:
Чтобы завершить ответ AKX, si.baseboard()
возвращает обещание (начиная с v3), поэтому вам нужно сделать что-то вроде этого:
si.baseboard().then(el => console.log(el.serial))
или, если вы хотите придерживаться синтаксиса обратного вызова
si.baseboard(el => { console.log(el.serial) })
Обратите внимание, что он возвращает пустую строку, если я запускаю скрипт как обычный пользователь. Я могу отобразить серийный номер, только если я запускаю его как root.
Ответ №3:
Я обнаружил, что могу использовать serial-number для получения уникального номера даже на виртуальной машине.
var serialNumber = require('serial-number');
serialNumber(function (err, value) {
console.log(value);
});
Комментарии:
1. serial-number основан на dmidecode , так что вы, вероятно, можете сделать. Обратите внимание, что мне также приходится иметь дело с правом доступа к этому пакету в моей системе (не виртуальной машине).
2. Вы знаете, как я могу получить значение и сохранить его в другой переменной вне функции? Я пробовал другой метод, но не работает