LINUX.ORG.RU

Избранные сообщения bga_

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

Форум — Development

По многочисленным просьбам создается тема для тех, кто хочет поднять свою квалификацию, и тех, кто готов принять таких людей в свои проекты.

Для уменьшения трафика:

  1. Соискателям: указывайте что умеете и чем хотите заняться
  2. «проектным менеджерам»: что за проект, на чём написано и что требуется допилить.

Так же убедитесь что в профиле есть все нужные контакты.

Сайты по поиску волонтёров

  • https://openhatch.org/search/ — закрытие багов за плюсик в карму (к сожалению, возможности отфильтровать результаты поиска очень слабые)
  • https://freedomsponsors.org — здесь можно получить денежку за улучшение свободного софта (например, за реализацию предложенных фич).
  • http://www.x.org/wiki/XorgEVoC/ — аналог GSoC от X.org, не привязан ко времени года, могут брать участие даже не студенты (в таком случае они свои $5000 не получат)

За ссылки спасибо yurikoles

 

true_admin
()

Сломали ALSA

Форум — Desktop

Что-то сломало звуковую подсистему. Пытаюсь менять громкость, но она меняется обратно и регулятор в трее дергается с частотой 1Гц
Снял на видео https://disk.yandex.ru/i/GsqRh2cOE4wnWg
Куда смотреть? /Pulseaudio и pipewire не предлагать./

 , ,

superuser
()

Кешировать все записи на диск, по-настоящему записать лишь после размонтирования

Форум — Admin

Дано: медленный накопитель маленького объема (2 ГБ), на котором хотелось бы избежать random access чтения-записи.

Ищется: решение, позволяющее произвести все нужные манипуляции на файлсистеме из этого накопителя, и лишь в самом конце произвести запись на него.

До этого читал все два гигабайта в образ, работал с образом, и писал обратно на накопитель. Это несколько избыточно, т.к. модифицируется лишь несколько сот мегабайт.

Хватит ли для минимизации записи (= тормозов) во время манипуляций запускать всё, что делаю с этим накопителем, через eatmydata?

 eatmydata,

token_polyak
()

Проблема со шрифтами в System Shock Remake

Форум — Games

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

Есть ли истории успеха?

 system shock,

LongLiveUbuntu
()

Очередной рабоче-игровой комп

Галерея — Скриншоты

В последнее время появилось сразу два опроса насчет игр, в галерею запостили Ведьмака. Я тут решил тоже отметиться. Китайский Xeon и RX590 вполне ещё могут справляться с новыми играми.

В связи с последними событиями покупать игры в стиме стало проблематично, поэтому решил поднять пиратский флаг. С этим хорошо помогает проект от нашего соотечественника PortWINE. Он помогает использовать Proton для запуска игр без стима. Ну и конечно проект от главного мэйнтенйера WINE из RedHat под ником GloriusEggroll — proton-ge.

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

>>> Просмотр (1920x2160, 2997 Kb)

 , , ,

AleksK
()

Есть тут любители funeral doom?

Форум — Talks

Затравка https://www.youtube.com/watch?v=eh6WnswoG8M
Рекомендуйте группы

 ,

bga_
()

Fedora 38 не находит звуковых устройств на HONOR Magicbook x14

Форум — Linux-install

Здравствуйте, только установил линукс на ноутбук. Fedora не видит звуковых устройств, если важно,то версия KDE Plasma. Пишет: не найдено устройств ввода или вывода звука.

 

kakle
()

golang time.Parse - очень странное поведение...

Форум — Development
package main

import (
  "fmt"
  "time"
)

const (
	layout = "2006-01-02 15:04:05"
//  	layout = "2006-01-02 14:04:05"
)

func main() {
  dt := "2022-12-13 14:15:16"
  tm, err := time.Parse(layout, dt)
  if err != nil {
    fmt.Println(err)
  }
  fmt.Println(tm)
}

Ответ:

2022-12-13 14:15:16 +0000 UTC
Меняю layout.
Было:
layout на "2006-01-02 15:04:05"
Стало:
layout на "2006-01-02 14:04:05"
Т.е. всего одна цифра изменена!
package main

import (
  "fmt"
  "time"
)

const (
//      layout = "2006-01-02 15:04:05"
  	layout = "2006-01-02 14:04:05"
)

func main() {
  dt := "2022-12-13 14:15:16"
  tm, err := time.Parse(layout, dt)
  if err != nil {
    fmt.Println(err)
  }
  fmt.Println(tm)
}
Ответ:
parsing time "2022-12-13 14:15:16": month out of range
0001-01-01 00:00:00 +0000 UTC
А почему?!! :)

Пример нашёл здесь, но внятного объяснения так и не получил, не понял...

 

Windows
()

60 антипаттернов для С++ программиста

Форум — Development

Постоянно писать «как делать правильный код» надоедает. Поэтому для разнообразия и развлечения написал мини-книгу «60 антипаттернов для С++ программиста». Этакие вредные советы в духе «Книга для непослушных детей и их родителей».

На самом деле там, не только вредные советы, но и разбор почему они собственно вредны. Будет полезно почитать новичкам в программировании. Думаю, каждый знает кого-то, кому будет полезно почитать этот материал :). Впрочем, опытные программисты тоже смогут найти интересное для себя и узнать/освежить знания про некоторых тонкие моменты C++.

Там много букв. Приглашаю запастись кофе/энергетиком и приступать. Буду рад обсуждениям и дополнениям, основанном на вашем опыте.

Ещё я этот текст переработал для бумажного издания. Оно в подготовке для печати. Смысл там в целом тот же, но пришлось многое переделать или расписать подробнее. Ведь нельзя в бумажной книге дать 100500 ссылок на сторонние ресурсы «читать здесь про xxx подробнее». Надеюсь, успеем напечатать к осенним конференциям и будем раздавать на стенде, например по кодовым словам. Приходите на стенд и говорите, что с linux.org.ru и что там на тему бумажной книги :)

Парочка вредных советов для примера:

  • Пишите ваши .h-файлы так, чтобы они зависели от других заголовков, и при этом не включайте их в свой заголовочный файл. Пусть тот, кто инклудит, догадается, какие заголовки нужно заранее заинклудить перед использованием вашего файла. Развлеките коллег квестами!
  • Пишите код так, как будто его будет читать председатель жюри IOCCC и он знает, где вы живёте (чтоб приехать и вручить вам приз).

P.S. PDF, если кому-то так удобнее.

 , , , ,

Andrey_Karpov_2020
()

Блокировка экрана устройства в режиме Framebuffer под Linux Deploy

Форум — Desktop

Давно стал использовать планшет Samsung на android в качестве второго linux устройства. По содержимому - запускается Linux Deploy, под него Debian 11 armhf, а изображение выводится через режим framebuffer.

Настройка тачскрина, добавление стилуса, мышки или клавы происходило путем выяснения event’a и последующего конфигурирования xorg файлов.

Есть задача - в режиме framebuffer у android забирается полностью управление устройствами, иначе говоря кнопки на планшете - не работают. В таком состоянии очень хочется заблокировать планшет, чтоб он не тратил аккумулятор на экран, а позже достать его из «сна». Насколько я понимаю, достаточно снова узнать event кнопки блокировки, но как обработать этот сценарий в xorg файле? Буду всей душой рад любой помощи!

 , ,

Sabellus
()

Bounty: поддержка шифрованных звонков (DTLS-SRTP) в Gajim

Форум — Job

Добрый день, ЛОР!
Объявляется дефолт баунти в размере 10000 американских электрических долларов (USDT) во имя запиливания поддержки шифрованных звонков в Gajim.

Баг-репорт: https://dev.gajim.org/gajim/gajim/-/issues/10109
Спека: https://xmpp.org/extensions/xep-0320.html
Примеры реализации: раз, два

Контрольные точки: необходимо поддержка шифрованных звонков (in/out) между Gajim и остальными клиентами, которые умеют в XEP-0320: Dino, Conversations, Siskin.


Оставляйте свои Jabber-контакты.

 , , , ,

annerleen
()

[жж] словил сбойные сектора на nvme ssd

Форум — General

Дорогой Уважаемый ЛОР,

Я словил первое в своей жизни проявление сбойных секторов на SSD. Пациент — Samsung SSD 970 EVO 2TB с прошивкой 2B2QEXE7, в эксплуатации примерно год. Пару-тройку дней назад мне почему-то захотелось сделать копию вообще всех данных из домашней директории, включая файлы, которые легко скачать из сети при надобности. Некоторые из этих файлов лежали там с момента миграции на накопитель, без обращений. И при копировании одного из таких файлов программа сказала: «А я, кажись, чот не могу». После того, как потихоньку пришло осознание произошедшего, я глянул в лог и увидел там:

blk_update_request: critical medium error, dev nvme0n1, sector 313199872 op 0x0:(READ) flags 0x80700 phys_seg 8 prio class 0

Что интересно, во второй раз файл успешно скопировался. Не знаю, прочитались там настоящие данные или мусор. К сожалению, вот этот конкретный файл повторно скачать оказалось неоткуда. Чтение данных с nvme0n1 по тому адресу выдало какие-то данные, не нули. Тут я решил, что SSD умный, что он понял, что страница не читается стабильно, и увёл её в чулан, на её место подставил новую, а данные всё-таки скопировал. Но на всякий случай решил запустить холостое чтение с блочного устройства. Сбойных блоков оказалось больше. Пробовал читать конкретные места. Зачастую чтение было успешным, но через много чтений всё же происходили ошибки. Попробовал перезаписать место с ошибками чтения теми же данными. Ошибки там прекратились.

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

За время тестов в логи свалилось 546 строк с «blk_update_request: critical medium error», но ошибки иногда сыпались так часто, что в сумме набралось 888 «callbacks suppressed». В статусе накопителя написано, что ошибок доступа к носителю было 1484. Так как в логи основной системы не попало происходившее на LiveUSB, можно считать, что числа сходятся. К сожалению, не помню, были ли там ошибки до недавних событий. Всего различных сбойных секторов было 167 штук.

В данных из плохих секторов нашлись обрывки Packages из Debian. Судя по версиям пакетов, эти куски из очень старых Packages, возможно ещё из 2016. Если это так, они приехали во время миграции на накопитель, и с тех пор не перезаписывались и не читались. Один кусок оказался очень похож на файл переводов и нашёлся в /usr/share/locale/gl/LC_MESSAGES/coreutils.mo, который конечно же ни разу не читался с момента последней переустановки пакета coreutils в начале августа 2019.

smartctl:

=== START OF SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

SMART/Health Information (NVMe Log 0x02)
Critical Warning:                   0x00
Temperature:                        41 Celsius
Available Spare:                    100%
Available Spare Threshold:          10%
Percentage Used:                    1%
Data Units Read:                    162 937 114 [83,4 TB]
Data Units Written:                 65 584 401 [33,5 TB]
Host Read Commands:                 691 234 670
Host Write Commands:                544 796 594
Controller Busy Time:               3 278
Power Cycles:                       719
Power On Hours:                     2 249
Unsafe Shutdowns:                   82
Media and Data Integrity Errors:    1 484
Error Information Log Entries:      1 783
Warning  Comp. Temperature Time:    0
Critical Comp. Temperature Time:    0
Temperature Sensor 1:               41 Celsius
Temperature Sensor 2:               42 Celsius

Error Information (NVMe Log 0x01, max 64 entries)
No Errors Logged

Терабайт тридцать-сорок я добавил чтением накопителя во время тестов.

Думаю, из произошедшего можно сделать, как минимум, следующие выводы:

  • полгода без чтения страницы на SSD достаточно для последующих ошибок чтения;
  • чтение такой страницы не заставляет SSD подменять страницу на новую, он с радостью выдаёт ошибку чтения на одном и том же месте много раз подряд;
  • trim не означает очистку всех неиспользуемых блоков ФС, они же меньше страницы. Некоторые данные могут жить в закоулках годами;
  • SSD желательно периодически прочёсывать чтением, чтобы словить сюрпризы пораньше;
  • если такое происходит на TLC 3D V-NAND, страшно подумать, что будет на QLC.

Upd.
Узнал, что в NVMe есть фича 0x10, которая управляет температурами, при которых SSD должен начать тормозить для снижения нагрева. Правда для 970 EVO эти температуры дожны быть в диапазоне 80–82 °C, а попытка установить любые значения кроме 0 для фичи 0x10 завершаются неудачай.


Upd. 11 мая 2021, то есть примерно через год и два месяца после первого раза, появились новые ошибки чтения. При повторном чтении тех же мест ошибки повторялись, но через некоторое время пропали.


Upd. 5 июня 2021. Аккумулятор оказался вздут в той секции, что прилегает к SSD. Видимо, предупреждение о температурном лимите в 65°C на аккумуляторе написано не просто так.


Upd. 20 февраля 2022. Накопитель отправился на пенсию.

 , , , , ,

i-rinat
()

Как долго лежат ssd/nvme/m.2

Форум — Linux-hardware

Речь далее о потере данных от долго лежания диска без питания.

На сколько я понял, сейчас TLС память везде используется с 3 битами на ячейку, если правильно сказал. По разным данным время которое диск может лежать без питания разнится от 1-2 лет, до 10 лет. При этом у производителя памяти типа kingston/hynix не нашел никаких данных. Мы говорим о комнатрых условиях хранения.

Вопрос у вас сколько такие диски лежали без потери данных, или сколько у вас они пролежали и данные потряли?

Также если не сложно дайте оценку времени работы (срока службы), когда у вас такие диски сдыхали?

 , ,

VoDD87
()

Python скрипт кликающий по экрану

Форум — Development

Переношу проект с одной версии программы на другую, т.к. импорт невозможен, использую копипаст объектов. Есть рутинная задача по копированию названий объектов, в корне проекта их нет, поэтому копировать название возможно только тыкая по экрану в чём python мне и помог.

Вот такой код

import keyboard
import threading
import time
import pyautogui

#import pyautogui - координаты мышки
#pyautogui.displayMousePosition()

def exit_on_esc():
    while True:
        if keyboard.is_pressed('esc'):
            exit(1)

def main():
    #задержка перед началом работы скрипта
    time.sleep(10)

    #находимся на первом проекте

    #определяем количество повторений
    repetitions = 6

    for i in range(repetitions):
        # нажимаем F2, чтобы выделить название объекта
        pyautogui.moveTo(133, 819) # координаты первого объекта
        pyautogui.click()
        pyautogui.press('down', presses=i)
        pyautogui.press('f2')
        #копируем название в буфер обмена
        pyautogui.hotkey('ctrl', 'c')
    
        #переключаемся на второй проект
        pyautogui.hotkey('alt', 'tab')

        # вводим новое название объекта 
        pyautogui.moveTo(133, 772)
        pyautogui.click()
        pyautogui.press('down', presses=i)
        pyautogui.press('f2')
        pyautogui.hotkey('ctrl', 'v')
        pyautogui.press('enter')

        # переключаемся на первый проект
        pyautogui.hotkey('alt', 'tab')


if __name__ == "__main__":
    # Запуск потока с отлавливанием нажатия ESC
    exit_thread = threading.Thread(target=exit_on_esc)
    exit_thread.start()

    # Запуск основного потока
    main_thread = threading.Thread(target=main)
    main_thread.start()

#скрипт выполнен!

Все хорошо работает, но каждый раз приходиться в ручную забивать координаты сначала одного экрана с первым проектом, затем второго со вторым. Может кто-то помочь чтобы координаты как-то сами определялись после первого нажатия на один объект и затем на второй, а потом чтобы всё запускалось?

 ,

ilyaGor
()

Свершилось: поломалась btrfs на ноуте

Форум — Desktop

Дано: ноут Thinkpad с Core i5 и SSD на 256 Гб. Arch, ядро последнее ванильное арчевское, что-то типа 6.2.3 Около полугода (как выдали ноут на работе) установлен Arch на btrfs, dm-crypt, два раздела btrfs (/ и /home) с subvolumes, сжатием, снапшотами (snapper).

Сегодня в какой-то момент получил сообщение, что нет места на файловой системе. du показывает 50 Гб свободного места. Файлы можно удалять, удалил на несколько гигов. Но создавать или модифицировать файлы невозможно, с той же ошибкой, что не хватает места.

Удалил все снэпшоты снэппер, безрезультатно.

Попытался загрузиться в rescue режим, запустил btrfsck на /home и /

На /home отработал без ошибок, на / - миллиард незаканчивающихся ошибок…

Т.к. у меня есть полная копия на десктопе, а также бэкапы, слил последние изменения из /home, буду переустанавливать.

Но осадочек остался, хотя Arch и btrfs пользуюсь уже лет 15. Правда, раньше не пользовался снэпшотами (за исключением того, что их использует докер).

Не знаю зачем пишу, знаю, что в меня полетят помидоры за Arch и btrfs. Просто предупреждение, наверное.

 ,

emorozov
()

Жизнь с ноутбуком, на котором жизни быть не должно

Галерея — Рабочие места

Добрый вечер, ЛОРчане. Первый раз делюсь чем-то подобным. Встречайте - рабочее место основанное на MacBook Air с M2. На фоне можно видеть iMac 5K 2017 на 27" (базовая версия + потом докидывал до 64 гБ ОЗУ), однако сейчас он у меня не в почёте, ибо слабоват относительно ноута (всего-то 5 лет прошло). Видал аймак всякое за свою жизнь (гентушечку с 10 тБ свопа по юзб например :) ), но сейчас не об этом.

Это мой второй макбук на чипе от Apple, первый был залит ряженкой (кривые руки) и сейчас работает в качестве сервера (в линукс перезагрузить возможности нет (залипание клавиш), приходится выживать под макосью). Пользовался Asahi в качестве второй системы ещё до альфа релиза, так что уже «подружился» с линуксом на арме.

( читать дальше... )

По рабочему месту:

  • ЦАП - FiiO K5 Pro ESS
  • Наушники - Beyerdynamic DT 990 Pro (на 250 Ом)
  • Колонки - стереопара HomePod mini (слева от Марисы один из них)
  • Фумо: Мариса, Койши и Сырно
  • Мышь: MX Anywhere 3 (абсолютно не пользуюсь, если надо поуправлять аймаком - можно использовать клаву+трекпад от макбука по беспроводу)

>>> Просмотр (3657x5120, 3216 Kb)

 , , , ,

ivabus
()

fnf 1.1 (теперь 0.1) — форк консольной утилиты нечёткого поиска fzy

Новости — Open Source
fnf 1.1 (теперь 0.1) — форк консольной утилиты нечёткого поиска fzy
Группа Open Source

Leo Abramovich (автор консольного менеджера файлов clifm) после годового игнорирования его PR #170, существенно улучшающего возможности fzy, принял решение создать форк – fnf (fnf’s not fzy).

( читать дальше... )

Дополнение: 6 июня автор исправил номер версии проекта на 0.1.

>>> Подробности

 , , , ,

dataman
()

constexpr в C++ на самом деле не const

Форум — Development

Привет, ЛОР!

Нашёл забавную фишку про C++. Если вкратце, можно сделать, чтобы следующий кусок кода не вываливался с ошибкой при сборке.

int main () {
  constexpr int a = f ();
  constexpr int b = f ();

  static_assert (a != b, "fail");
}

Как это сделать? Об этом написано тут: https://b.atch.se/posts/non-constant-constant-expressions/

Если вкратце, то C++ стал настолько монструозен, что разные части стандарта могут прямо друг другу противоречить, и вместе эти фичи языка дают прямо таки неожиданные результаты. В итоге, можно сделать так, чтобы функция, помеченная как constexpr, на самом деле в каждом вызове выдавала рандомное значение в зависимости от фазы луны. Если очень хочется.

P.S. первый пример из ссылки GCC сейчас обрабатывает корректно и вываливает ошибку из static_assert. Но второй ещё работает в GCC 13. Для Ъ код ниже.

namespace detail {
  struct A {
    constexpr A () { }
    friend constexpr int adl_flag (A);
  };

  template<class Tag>
  struct writer {
    friend constexpr int adl_flag (Tag) {
      return 0;
    }
  };
}

template<class Tag, int = adl_flag (Tag {})>
constexpr bool is_flag_usable (int) {
  return true;
}

template<class Tag>
constexpr bool is_flag_usable (...) {
  return false;
}

template<bool B, class Tag = detail::A>
struct dependent_writer : detail::writer<Tag> { };

template<
  class Tag = detail::A,
  bool    B = is_flag_usable<Tag> (0),
  int       = sizeof (dependent_writer<B>)
>
constexpr int f () {
  return B;
}

int main () {
  constexpr int a = f ();
  constexpr int b = f ();

  static_assert (a != b, "fail");
}

 , ,

hateyoufeel
()

Игры в терминале

Форум — Games

Данный топик про игры в юниксовом терминале. Здесь я буду на регулярной основе (в идеале) описывать в отдельном комментарии какую-нибудь игру. В стартер-посте будут ссылки на эти комментарии. Обзор будет не очень подготовленным, поэтому не ждите литературных изысков. Но тем не менее те, кто любит подобное красноглазие, смогут познакомиться с играми и выбрать на свой вкус понравившуюся вещицу. Данная тема создана по аналогии с соседним топиком про стимовские игры.

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

Теги для поисковых ботов (жрите мои любимые ботики): ascii games, terminal games, ncurses games, tty games, console games, cli games, tui games, text-based games, command line games, игры в терминале, игры в консоле, игры для командной строки.

Критерии отбора:

  1. Язык программирования: Си(в приоритете), си++. Остальные пока не рассматриваются. Потенциальные в будущем - ада, фортран, бейсик, паскаль. Жирный пайтон идет лесом, хипстерские гоу, раст и иже с ними туда же.
  2. Открытые исходники с лицензиями, позволяющими модификацию, не препятствующие распространению. Свободные и одобренные дядюшкой Столлманом в приоритете.
  3. Зависимости. Без sdl и других графических либ. Опционально пускай будет, например, для музыки. Но не навязывается. NCurses и подобные библиотеки для работы с терминалом всяко одобряются и котируются. Не приветствуются в зависимостях всякие гугловские юнит тесты и другие чёрт ногу сломит либы. Для маленьких терминальных игр эта мишура не нужна.

Источники игорей:

  1. https://ttygames.wordpress.com/
  2. https://github.com/ligurio/awesome-ttygames
  3. https://inconsolation.wordpress.com/
  4. https://kmandla.wordpress.com/
  5. https://ibiblio.org/pub/linux/games/ Артефакты прошлого. Игры для терминала надо искать. Не всё собирается с современным компилятором.
  6. gopher://sdf.org/9/users/saahriktu/bttf/gamez_p0.tar.lzma (использовать lynx) - сборник ascii игр, собранный камрадом @saahriktu
  7. https://www.youtube.com/user/livibetter/videos
  8. https://zenway.ru/tag/ASCII
  9. https://blends.debian.org/games/tasks/console
  10. ASCII игры по Linux
  11. Поиск на github.com, gitlab.com по соответствующим запросам
  12. Поиск рогаликов на http://www.roguebasin.com/index.php?title=Category:Roguelike_games
  13. Все поисковики, даже малоизвестные иногда выдают страницы, на которые не попадешь с гугла или яндекса.

Сами игори:

!!!NEW!!! 1. 8f - Терминальный вариант карточной игры Сумасшедшие восьмёрки (Crazy Eights).

  1. Alienwave - Сложная Galaga-подобная игра с хорошим ascii-артом.
  2. Bricktick - Красивый клон арканоида с бонусами.
  3. CLines - Качественная реализация всеми известной офисной игры Color Lines.
  4. Dominoes - Реализация одного из вариантов игры Домино.
  5. Lwrace - Бегаем символом «O», собираем «$», избегаем «#», уворачиваемся от «o».
  6. Morpion solitaire - Отличная реализация отличной же тетрадной игры Join Five.
  7. MyMan - Пакман для терминала с множеством настроек.
  8. Peg-solitaire.c - Добротная реализация одноименной настольной игры с 5-ю раскладками.
  9. XT gyoretsu - Воссозданная с любовью и с ncurses старая тетрадная игра.
  10. Ztrack - Псевдо-тридешные гоночки с красивым бэкграундом.
  11. to be continued

 , , ,

nab_linux
()

Ubuntu Sway Remix 23.04

Новости — Ubuntu Linux
Группа Ubuntu Linux

Доступен выпуск дистрибутива Ubuntu Sway Remix 23.04, предоставляющего преднастроенный и готовый к использованию рабочий стол на основе мозаичного композитного менеджера Sway. Дистрибутив является неофициальной редакцией Ubuntu 23.04, созданной с оглядкой как на опытных пользователей GNU/Linux, так и новичков, желающих попробовать окружение мозаичных оконных менеджеров без необходимости в их долгой настройке. Для загрузки подготовлены сборки для архитектур amd64 и arm64 (Raspberry Pi).

( читать дальше... )

Скачать: https://ubuntusway.com/downloads.php

>>> Подробности

 , ,

Sunderland93
()