Команда для просмотра версии NixOS, на которой работает моя машина?

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

Если я понимаю контекст правильно ответить на ваш вопрос, это нежелательно для вас. Терминалы, которые вы открываете, должны использоваться исключительно для отображения вывода вашего приложения, и в то же время они не должны запускать оболочку. Таким образом, вам нужно будет указать настраиваемую команду для запуска, а не оболочку по умолчанию.Эта настраиваемая команда может легко быть простым скриптом (или утилитой C ++), которая отправляет номер строки терминала (вывод команды tty ) обратно в ваше приложение, возможно, изменить некоторые настройки терминала и сигнала (например, выключить локальное эхо ( stty ), отключение сигналов ( stty или trap )) и, наконец, переход в гигантский сон .

Существует множество способов вернуть tty-номер в основное приложение. Просто имейте в виду, что запуск этих терминалов и скрипта внутри является асинхронным с точки зрения вашего приложения. Например. если вы поместите вывод tty во временный файл с фиксированным именем файла, вам нужно будет убедиться, что приложение не будет преждевременно читать предыдущую версию этого файла. Вы могли бы, например, каждый раз создавайте уникальное случайное имя файла и ждите его появления в основном приложении.

Позвольте мне порекомендовать вам совершенно другой подход.

Фактическая эмуляция терминала gnome-terminal (и большинства (если не всех) других эмуляторов терминала на базе Gtk +) выполняется с помощью виджета VTE. Если вы пишете приложение с помощью инструментария Gtk +, добавить виджет VTE так же просто, как добавить, скажем, флажок.

Вместо использования gnome-terminal или xterm или чего-то еще, ваше приложение может представлять графическое окно, содержащее несколько виджетов VTE, или несколько графических окон с одним VTE внутри каждого, в зависимости от того, что вы предпочитаете.Или, если вы не хотите, чтобы в вашем реальном приложении была зависимость от Gtk +, вы можете легко создать отдельное крошечное вспомогательное приложение для этой задачи (вы даже можете рассмотреть Python вместо C / C ++).

В этом случае по умолчанию оболочка не запускается (вам придется явно сделать это с помощью метода vte_terminal_spawn_sync () , что вы будете счастливы не делать). Вы можете просто получить строку терминала с помощью vte_pty_get_fd () , преобразовать ее в строку с помощью ptsname () и передать обратно в основное приложение. Или, если вы делаете это в одном приложении, вы можете даже vte_terminal_feed () отображать данные.

2
16.07.2017, 01:48
2 ответа

Из руководства Nixos:

nixos-version
7
28.04.2021, 23:59
$ nix-info -m
 - system: `"x86_64-linux"`
 - host os: `Linux 5.10.79, NixOS, 21.05.4116.46251a79f75 (Okapi)`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.3.16`
 - channels(root): `"nixos-21.05.4116.46251a79f75"`
 - channels(roman): `""`
 - nixpkgs: `/nix/var/nix/profiles/per-user/root/channels/nixos`
  • host osпоказывает версию системы
  • channels(root)показывает обновленную версию канала
  • channels(roman)показывает, что пользователь roman находится на том же канале, что и хост

enter image description here

Источникhttps://dopp.sk/posts/NixOS_channels/

1
16.11.2021, 12:46

Теги

Похожие вопросы