LINUX.ORG.RU

Сообщения sergs

 

Компьютер для работы в Blender

Стала задача выбора компьютера для освоения и дальнейшего использования Blender с бюджетом $2000-$2500. Цель — получить приемлемую производительность для обучения и комфортной работы, а также иметь хорошие возможности для дальнейшего апгрейда, если/когда такая необходимость возникнет. Хотелось бы использовать этот компьютер максимально долго.

Вариантов, как понимаю два: взять готовый системник или собрать самостоятельно. Сам я не особо в теме как железа, так и того, что необходимо для комфортной работы в Blender.

Для самосбора выбор пал на следующие компоненты:

Из укомплектованных вариантов смотрю на DELL Alienware Aurora R10 (Ryzen 5 5600x, GeForce RTX 3060,12Gb) и Cobra Gaming I14F.16.H1S5.36T.2726 (Core i5-10400F, GeForce RTX 3060 Ti, 8Gb).

Как понимаю, Alienware проигрывает в возможности дальнейшего апгрейда, хотя и является наиболее производительным из всех. Самосбор и Cobra дают больше возможностей для дальнейшего апгрейда, а также приемлемую стартовую производительность.

На каком из вариантов лучше остановиться? Может, стоит смотреть на что-то другое или заменить часть компонент?

 , ,

sergs
()

QComboBox c множественным выбором

Понадобилось реализовать выпадающий список с множественным выбором для программы на Qt5. Для этого реализовал модель, у элементов которой выставлен флаг Qt::ItemIsUserCheckable

class ItemModel : public QStandardItemModel
{
    Q_OBJECT

  public:
    ItemModel(QObject *parent = nullptr);
    Qt::ItemFlags flags(const QModelIndex &index) const override;
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;

  signals:
    void itemCheckStateChanged();
};

ItemModel::ItemModel(QObject *parent)
  : QStandardItemModel(0, 1, parent)
{
}

Qt::ItemFlags ItemModel::flags(const QModelIndex &index) const
{
  return QStandardItemModel::flags(index) | Qt::ItemIsUserCheckable;
}

QVariant ItemModel::data(const QModelIndex &index, int role) const
{
  QVariant value = QStandardItemModel::data(index, role);
  if (index.isValid() && role == Qt::CheckStateRole && !value.isValid())
  {
    value = Qt::Unchecked;
  }
  return value;
}

bool ItemModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
  bool ok = QStandardItemModel::setData(index, value, role);
  if (ok && role == Qt::CheckStateRole)
  {
    emit dataChanged(index, index);
    emit itemCheckStateChanged();
  }
  return ok;
}

и собственно сам combobox с отображением флажков

class CComboBox : public QComboBox
{
    Q_OBJECT

  public:
    CComboBox(QWidget *parent = nullptr);
    QString separator() const;
    void setSeparator(const QString &separator);
    QString defaultText() const;
    void setDefaultText(const QString &text);
    QStringList checkedItems() const;
    Qt::CheckState itemCheckState(int index) const;
    void setItemCheckState(int index, Qt::CheckState state);
    void toggleItemCheckState(int index);
    void hidePopup() override;
    bool eventFilter(QObject *object, QEvent *event) override;

  signals:
    void checkedItemsChanged(const QStringList &items);

  public slots:
    void setCheckedItems(const QStringList &items);

  protected:
    void resizeEvent(QResizeEvent *event) override;

  protected slots:
    void showContextMenu(QPoint pos);
    void selectAllOptions();
    void deselectAllOptions();

  private:
    void updateCheckedItems();
    void updateDisplayText();

    QString mSeparator;
    QString mDefaultText;

    bool mSkipHide = false;
    QMenu *mContextMenu = nullptr;
    QAction *mSelectAllAction = nullptr;
    QAction *mDeselectAllAction = nullptr;
};

CComboBox::CComboBox(QWidget *parent) : QComboBox(parent), mSeparator(QStringLiteral(", "))
{
  setModel(new ItemModel(this));

  QLineEdit *lineEdit = new QLineEdit(this);
  lineEdit->setReadOnly(true);
  setLineEdit(lineEdit);

  mContextMenu = new QMenu(this);
  mSelectAllAction = mContextMenu->addAction(tr("Select All"));
  mDeselectAllAction = mContextMenu->addAction(tr("Deselect All"));
  connect(mSelectAllAction, &QAction::triggered, this, &CComboBox::selectAllOptions);
  connect(mDeselectAllAction, &QAction::triggered, this, &CComboBox::deselectAllOptions);

  view()->viewport()->installEventFilter(this);
  view()->setContextMenuPolicy(Qt::CustomContextMenu);
  connect(view(), &QAbstractItemView::customContextMenuRequested, this, &CComboBox::showContextMenu);

  ItemModel *myModel = qobject_cast<QgsCheckableItemModel *>(model());
  connect(myModel, &QgsCheckableItemModel::itemCheckStateChanged, this, &CComboBox::updateCheckedItems);
  connect(model(), &QStandardItemModel::rowsInserted, this, [ = ](const QModelIndex &, int, int) { updateCheckedItems(); });
  connect(model(), &QStandardItemModel::rowsRemoved, this, [ = ](const QModelIndex &, int, int) { updateCheckedItems(); });
  connect(this, static_cast< void (QComboBox::*)(int) >(&QComboBox::activated), this, &CComboBox::toggleItemCheckState);
}

QString CComboBox::separator() const
{
  return mSeparator;
}

void CComboBox::setSeparator(const QString &separator)
{
  if (mSeparator != separator)
  {
    mSeparator = separator;
    updateDisplayText();
  }
}

QString CComboBox::defaultText() const
{
  return mDefaultText;
}

void CComboBox::setDefaultText(const QString &text)
{
  if (mDefaultText != text)
  {
    mDefaultText = text;
    updateDisplayText();
  }
}

QStringList CComboBox::checkedItems() const
{
  QStringList items;
  if (model())
  {
    QModelIndex index = model()->index(0, modelColumn(), rootModelIndex());
    QModelIndexList indexes = model()->match(index, Qt::CheckStateRole, Qt::Checked, -1, Qt::MatchExactly);
    const auto constIndexes = indexes;
    for (const QModelIndex &index : constIndexes)
    {
      items += index.data().toString();
    }
  }
  return items;
}

Qt::CheckState CComboBox::itemCheckState(int index) const
{
  return static_cast<Qt::CheckState>(itemData(index, Qt::CheckStateRole).toInt());
}

void CComboBox::setItemCheckState(int index, Qt::CheckState state)
{
  setItemData(index, state, Qt::CheckStateRole);
}

void CComboBox::toggleItemCheckState(int index)
{
  QVariant value = itemData(index, Qt::CheckStateRole);
  if (value.isValid())
  {
    Qt::CheckState state = static_cast<Qt::CheckState>(value.toInt());
    setItemData(index, (state == Qt::Unchecked ? Qt::Checked : Qt::Unchecked), Qt::CheckStateRole);
  }
}

void CComboBox::hidePopup()
{
  if (!mSkipHide)
  {
    QComboBox::hidePopup();
  }
  mSkipHide = false;
}

void CComboBox::showContextMenu(QPoint pos)
{
  Q_UNUSED(pos)

  mContextMenu->exec(QCursor::pos());
}

void CComboBox::selectAllOptions()
{
  blockSignals(true);
  for (int i = 0;  i < count(); i++)
  {
    setItemData(i, Qt::Checked, Qt::CheckStateRole);
  }
  blockSignals(false);
  updateCheckedItems();
}

void CComboBox::deselectAllOptions()
{
  blockSignals(true);
  for (int i = 0;  i < count(); i++)
  {
    setItemData(i, Qt::Unchecked, Qt::CheckStateRole);
  }
  blockSignals(false);
  updateCheckedItems();
}

bool CComboBox::eventFilter(QObject *object, QEvent *event)
{
  if ((event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease) && object == view()->viewport())
  {
    mSkipHide = true;
  }

  if (event->type() == QEvent::MouseButtonRelease)
  {
    if (static_cast<QMouseEvent *>(event)->button() == Qt::RightButton)
    {
      return true;
    }
  }
  return QComboBox::eventFilter(object, event);
}

void CComboBox::setCheckedItems(const QStringList &items)
{
  const auto constItems = items;
  for (const QString &text : constItems)
  {
    const int index = findText(text);
    setItemCheckState(index, index != -1 ? Qt::Checked : Qt::Unchecked);
  }
}

void CComboBox::resizeEvent(QResizeEvent *event)
{
  QComboBox::resizeEvent(event);
  updateDisplayText();
}

void CComboBox::updateCheckedItems()
{
  QStringList items = checkedItems();
  updateDisplayText();
  emit checkedItemsChanged(items);
}

void CComboBox::updateDisplayText()
{
  QString text;
  QStringList items = checkedItems();
  if (items.isEmpty())
  {
    text = mDefaultText;
  }
  else
  {
    text = items.join(mSeparator);
  }

  QRect rect = lineEdit()->rect();
  QFontMetrics fontMetrics(font());
  text = fontMetrics.elidedText(text, Qt::ElideRight, rect.width());
  setEditText(text);
}

В целом все работает, но есть один непонятный баг. Если отметить флажками два элемента (или больше), а затем, не закрывая выпадающий список, снять флажки у всех элементов, кроме одного и щелкнуть за пределами списка чтобы закрыть его, то у единственного отмеченого элемента практически всегда сбрасывается состояние на неотмеченное. Подозреваю, что это каким-то образом связано з сигналом activated, но решить проблему не могу. Кто-нибудь может подсказать как поправить?

 , ,

sergs
()

VPN соединение рвется вскоре после подключения

Подключаюсь к рабочему VPN через NetworkManager. Соединение устанавливается, но после нескольких keep-alive пакетов рвется с ошибками

ppp0: recursion detected
Как понимаю, почему-то образуется петля в таблице маршрутизации.

Ubuntu 18.04.01 со стандратным ядром, NetworkManager 1.10.6 и плагин l2tr network-manager-l2tp-1.2.8 оба из репозитория.

Вот лог.

Так выглядит таблица маршрутизации перед подключением

default via 192.168.0.1 dev wlp3s0 proto dhcp metric 600 
192.168.0.0/24 dev wlp3s0 proto kernel scope link src 192.168.0.107 metric 600 

Она же после подключения к VPN (1.2.3.4 это VPN сервер)

default dev ppp0 proto static scope link metric 50 
default via 192.168.0.1 dev wlp3s0 proto dhcp metric 600 
1.2.3.4 dev ppp0 proto kernel scope link src 10.16.96.175 metric 50 
1.2.3.4 via 192.168.0.1 dev wlp3s0 proto static metric 600 
192.168.0.0/24 dev wlp3s0 proto kernel scope link src 192.168.0.107 metric 600 
192.168.0.1 dev wlp3s0 proto static scope link metric 600 

После обрыва соединения с «ppp0: recursion detected»

default via 192.168.0.1 dev wlp3s0 proto dhcp metric 600 
1.2.3.4 via 192.168.0.1 dev wlp3s0 proto static metric 600 
192.168.0.0/24 dev wlp3s0 proto kernel scope link src 192.168.0.107 metric 600 
192.168.0.1 dev wlp3s0 proto static scope link metric 600 

В качестве временного, полурабочего решения, подключаюсь к VPN при помощи небольшого скрипта, который помимо установки соединения с VPN сервером убирает лишний маршрут

nmcli c up MyVPN
ip route delete 1.2.3.4 dev ppp0
ip route add 192.168.0.0/24 dev ppp0

Но после отключения от VPN в этом случае перестает работать выход в Интернет, хотя пинги проходят. Пока не разобрался как исправить, буду благодарен за подсказку.

Собственно вопрос в том, можно ли как-то средствами NetworkManager решить проблему с добавление петли или так и придется скриптом поднимать соединение?

 ,

sergs
()

Не работает JS код в QtWebkit

Использую QtWebkit (точнее QWebView) для отображения HTML файла с JS. Файл загружается, но на этом все: нажатия на кнопки не обрабатываются, в консоли вал ошибок. При этом в браузерах Firefox/Chromium/Edge этот же файл открывается и работает. Т.е. либо я что-то делаю не так, либо в QWebView отсутствует поддержка некоторых фич JS.

Вот HTML

<html>
  <head>
    <script type="text/javascript" src="https://cdn.3dmapping.cloud/18.1.4/javascript/orbitgt_3dm_sdk.js"></script>
  </head>
  <body >
    <div id="app">

    <script type="text/javascript">
      var viewer;

      function handleReady() {
        viewer.setSize(600,400);
      }

      function handleDOMReady() {
        var applicationName = "QGIS Orbit plugin";
        var appElement = document.getElementById("m3dviewer");
        viewer = new orbitgt.mapping3d.sdk.viewer.SDKViewer(applicationName, appElement);
        viewer.isReady.then(handleReady);
      }

      document.addEventListener("DOMContentLoaded", handleDOMReady);
    </script>

    <div id="m3dviewer"/>
  </body>
</html>

Вот код на Python для быстрой проверки

import os
import sys

from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebKit import QWebSettings
from PyQt5.QtWebKitWidgets import QWebView, QWebInspector, QWebPage

filePath = os.path.abspath(os.path.join(os.path.dirname(__file__), 'index.html'))

class LoggedPage(QWebPage):
    def javaScriptConsoleMessage(self, msg, line, source):
        print ('JS: %s line %d: %s' % (source, line, msg))

app = QApplication(sys.argv)

webView = QWebView()
page = LoggedPage()
webView.setPage(page)

settings = webView.settings()
settings.setAttribute(QWebSettings.PluginsEnabled, True)
settings.setAttribute(QWebSettings.WebGLEnabled, True)
settings.setAttribute(QWebSettings.Accelerated2dCanvasEnabled, True)
settings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
inspector = QWebInspector()
inspector.setPage(webView.page())

webView.load(QUrl.fromLocalFile(filePath))
webView.show()

sys.exit(app.exec_())
Qt 5.9.5/5.10.1, Python 3.6.5. Также установлен libqt5webkit5-5.212.0~alpha2

Кто-нибудь сталкивался с подобной ситуацией, когда JS не работает? В чем причина? Может есть workaround'ы или список неподдерживаемых возможностей JS. Гуглил, но нашел только разрозненные упоминания, что QtWebKit не полностью ECMA-compliant.

 ,

sergs
()

Система ищет неподключенную флешку при загрузке

Поставил Ubuntu 18.04 на ноутбук c mini.iso записанного на флешку. Установил, вроде бы все хорошо, но процесс загрузки в какой-то момент ненадолго «замирает». Такое впечатление, что система пытается найти какое-то устройство. При этом systemd-analyze рапортует, что все в порядке

$ systemd-analyze 
Startup finished in 2.312s (kernel) + 1.961s (userspace) = 4.273s
graphical.target reached after 1.955s in userspace

Глянул логи. В dmesg ничего подозрительного нет. А вот в journalctl нашел вот такие странные строки

$ journalctl --system
...
Aug 04 14:35:50 laptop kernel: scsi 6:0:0:0: Direct-Access              USB DISK 2.0     PMAP PQ: 0 ANSI: 4
Aug 04 14:35:50 laptop kernel: sd 6:0:0:0: Attached scsi generic sg1 type 0
...
Aug 04 14:35:51 laptop kernel: sd 6:0:0:0: [sdb] 15124992 512-byte logical blocks: (7.74 GB/7.21 GiB)
Aug 04 14:35:51 laptop kernel: sd 6:0:0:0: [sdb] Write Protect is off
Aug 04 14:35:51 laptop kernel: sd 6:0:0:0: [sdb] Mode Sense: 23 00 00 00
Aug 04 14:35:51 laptop kernel: sd 6:0:0:0: [sdb] No Caching mode page found
Aug 04 14:35:51 laptop kernel: sd 6:0:0:0: [sdb] Assuming drive cache: write through
...
Этот «USB DISK 2.0» та самая флешка, с которой производилась установка, и она не подключена к ноутбуку. К нему в процессе загрузки вообще никаких сторонних устройств не было подключено.

Для проверки перезагрузил ноутбук несколько раз, и какждый раз то же самое: система откуда-то находит USB DISK 2.0 и, видимо, пытается что-то с ним сделать.

Кто-нибудь сталкивался с таким? Какие еще логи можно глянуть чтобы понять в чем дело?

 , ,

sergs
()

Миграция Git → SVN и разделение репозитория

Есть старый проект в SVN, который хочу перевести на Git с сохранением истории, веток и меток. Миграцию на Git провел при помощи svn2git, тут проблем не возникло. Но беда в том, что по факту в одном репозитории лежит несколько смежных проектов, т.е. структура примерно такая

repository root
 + project1
 | + dir1
 |  |- file1
 |  |- file2
 | + dir2
 |  |- fileN
 | + dirN
 + project2
 | + dir2_1
 |  |- file2_1
 |  |- file2_2
 | + dir2_2
 |  |- file2_N
 | + dir2_N
 + projectN

Хотелось бы разнести проекты по отдельным репозиториям, и не просто разнести, но и сохранить соответствующие проекту метки и ветки и удалить лишние.

Пытаюсь сделать это через filter-branch вот так

git filter-branch --prune-empty --tag-name-filter cat --subdirectory-filter project1 -- --all
git push --all new_repo
Но в результате получается что-то не то. Сам код на месте, а вот с ветками и метками не складывается.

Подскажите, как сохранить ветки и метки при разделении?

 , , ,

sergs
()

Легкая и расширяемая панель для WM

А cуществует ли легкая и расширяемая панель для разных WM с системным треем и возможностью вывода своей информации? Что-то вроде i3bar, но без привязки к WM.

Смотрел на tint2, fbpanel,bmpanel, но они имеют фиксированный набор встроенных индикаторов и не позволяют добавлять свои.

 ,

sergs
()

Ubuntu 16.04 долгая загрузка

Ubuntu 16.04.1 установленная с mini.iso (только базовая система, потом вручную доустанавливалось окружение) на Lenovo ThinkPad X230 загружается неприлично долго

$systemd-analyze 
Startup finished in 3.521s (firmware) + 3.481s (loader) + 2.032s (kernel) + 3min 586ms (userspace) = 3min 9.622s

Вот, что выдает systemd-analyze

systemd-analyze blame

systemd-analyze plot

Если правильно понимаю график загрузки, задержка происходит на инициализации устройства

sys-devices-pci0000:00-0000:00:1a.0-usb1-1\x2d1-1\x2d1.4-1\x2d1.4:1.0-bluetooth-hci0.device

Пробовал отключить bluetooth.servicе, но эффекта нет.

Посмотрел также в dmesg. Там несколько иная картина, большая задержка между инициализацией трекпоинта и apparmor

[    6.166619] input: TPPS/2 IBM TrackPoint as /devices/platform/i8042/serio1/serio2/input/input7
[   92.438151] audit: type=1400 audit(1476684183.179:2): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/sbin/ippusbxd" pid=613 comm="apparmor_parser"

Можно ли как-то исправить ситуацию?

 ,

sergs
()

Выбор компактного фотоаппарата

Озадачился приобретением компактного фотоаппарата «на каждый день», в том числе и для для съемки в поездках. Фотографией серьезно не занимаюсь, но, возможно, со временем войду во вкус, так что хотелось бы иметь не только автоматический режим, но и хоть какие-то ручные настройки. Бюджет до 500$.

Сейчас присматриваюсь к Olympus XZ-2 и Fujifilm FinePix XQ2. Первый чуть дешевле, но у Fuji больше сенсор, что, как я понимаю, будет плюсом при съемке, особенно в условиях недостаточного освещения.

Какой аппарат предпочтительнее? Может, есть еще какие-то достойные варианты в этой ценовой категории?

 , ,

sergs
()

QComboBox с checkable элементами не работает в некоторых окружениях

На PyQt4 нужно реализовать кастомный выпадающий список с поддержкой мультивыбора, т.е. элементы выпадающего списка должны иметь checkbox. Казалось бы проблемы нет: берем QStandardItemModel и заполняем её QStandardItem'ами, у которых установленны нужные флаги.

К сожалению, оказалось, что это работает далеко не во всех окружениях. В Windows все замечательно, в Linux+KDE — тоже. А вот к примеру в OpenBox, Gnome или в Mac OS checkbox'ов почему-то нет. Кто-нибудь сталкивался с таким? Это баг Qt или что-то не так в коде?

Вот пример

from PyQt4.QtGui import *
from PyQt4.QtCore import *

data = ['item 1', 'item 2', 'item 3']

class Example(QComboBox):
    def __init__(self):
        super(Example, self).__init__()

        self.model = QStandardItemModel(len(data), 1)
        for i, f in enumerate(data):
            item = QStandardItem(f)
            item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
            item.setData(Qt.Unchecked, Qt.CheckStateRole)
            self.model.setItem(i, 0, item)

        self.setModel(self.model)
        self.show()


def main():
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

 ,

sergs
()

Нет звука и не работает микрофон в гостевой OC

Есть виртуальная машина, созданная при помощи virt-mamager, в которой крутится 64-битная Windows 7. В качестве звукового устройства в virt-manager указан ich6. Гостевая система корректно определила звуковое устройство и установила для него драйвера. Но звука от гостя на хосте нет, также не работает микрофон. При этом при проигрывании звука на госте, виндовый микшер показывает активность.

Пробовал гуглить, но нахожу только старые темы, где народ жалуется на отсутствие драйверов для ac97 под 64-разрядную Windows 7.

У кого-нибудь получилось завести звук и микрофон в гостевой Windows? Поделитесь, пожалуйста рецептом.

ОС Debian 8 (Jessie) 64bit с последними обновлениями, ядро 4.2.6-3~bpo8+2 из backports. QEMU 2.1.2, virt-mananer 1.0.1

 , , ,

sergs
()

Независимое включение раскладок клавиатуры

Использую три раскладки. По умолчанию они переключаются циклично, одна за другой. А мне бы хотелось чтобы на каждую раскладку была своя комбинация клавиш. Например, CapsLock для активации первой раскладки, Shift+CapsLock — для второй, Ctrl+CapsLock — для третьей.

Нужно именно переключение на заданную раскладку, а не возможность набирать символы другой раскладки при зажатом модификаторе.

Можно ли такое сделать и если да, то как?

 ,

sergs
()

Настройка сети в QEMU/KVM

Для тестирования помимо Linux нужна Windows, так что осваиваю QEMU/KVM. После чтения документации и ArchWiki с созданием ВМ более-менее разобрался, осталось настроить сеть. Наиболее простой и медленный с точки зрения производительности способ — user-mode networking. Мне же хотелось бы получить максимальную производительность сети. Как понимаю, для этой цели лучше использовать tap-networking и включить vhost.

Собственно вопрос в том, как наиболее правильно настроить сеть. Стоит ли использовать qemu-bridge-helper или лучше создавать устройство tap и настраивать мост вручную? Буду признателен за совет и/или ссылки.

OC Debian Jessie, QEMU 2.1.2 из стандартного репозитория. Если это важно — сеть на хосте через wifi.

P.S.: про virt-mananger знаю, как и про то, что он делает всё необходимое без дополнительных действий с моей стороны. Но хотелось бы для себя разобраться как сделать требуемое на «чистом» QEMU.

 , , ,

sergs
()

Серая/не сильно темная тема Gtk

Посоветуйте, пожалуйста, тему gtk, ненапрягающую глаза. Например в серых тонах, не сильно темную или в цветах tango. Совсем темные скорее всего не подойдут, т.к. большинство сайтов и документов будет сильно контрастировать в таком окружении. Если ещё и тему иконок подходящую подскажете — будет вообще замечательно.

Из того, что видел понравились BSM Simpe и MediterraneanNight, иконки Тango и Faenza.

В итоге хочется получить:

  • спокойное оформление, приглушенные/пастельные цвета
  • хорошую читаемость иконок
  • завершенность, т.е. обойтись без значков, выбивающихся из общего оформления

Целевое окружение — Openbox, большая часть софта на gtk2, но есть несколько активно используемых приложений на Qt (используют стиль GTK+).

 ,

sergs
()

Debian: не заружается mini.iso в режиме UEFI

Пытаюсь установить Debian 8.2 на Lenovo ThinkPad x230, но застрял в самом начале — не удаётся загрузиться с установочного носителя при активном UEFI.

В ноутбук установлен пустой, неразмеченный SSD. В качестве загручного устойства подготовлена USB-флешка по инструкции с wiki на основе образа mini.iso

После копирования образа на флешке видно два раздела

Disk /dev/sdb: 7743 MB, 7743995904 bytes
64 heads, 32 sectors/track, 7385 cylinders, total 15124992 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x680ed1b8

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           0       45055       22528   17  Hidden HPFS/NTFS
/dev/sdb2           45056       57343        6144    1  FAT12

Т.к. на /dev/sdb2 все пакеты с прошивками не помещаются (недостаточно места), скопированы только те, что теоретически должны потребоваться.

В настройках выставлен режим UEFI only, CSM отключен, SecureBoot тоже отключен. Первым загрузочным устройством указана флешка. При загрузке предлагается выбрать загрузочное устройство, доступны флешка, SSD и LAN. При выборе флешки или SSD экран на мгновение становится чёрным, а потом опять отображается меню выбора загрузочного устройства. При этом в Legacy режиме загрузка с флешки происходит нормально.

Поиск выдает только баг #776317, который, как понимаю, уже исправлен. Предложенный там workaround с копированием файлов efi на второй раздел флешки пока ещё не пробовал.

В чём может быть проблема?

 , , ,

sergs
()

RSS подписка на новые темы