LINUX.ORG.RU

Сообщения saahriktu

 

С Днём программиста! (2026 год)

 , ,

$ cat src/main.rs
use time::OffsetDateTime;
use time::UtcOffset;

fn main() {
    let local_offset = UtcOffset::current_local_offset().unwrap_or(UtcOffset::UTC);
    let now = OffsetDateTime::now_utc().to_offset(local_offset);
    let yday = now.ordinal();

    println!("Текущий день года: {}", yday);
}
$ cat Cargo.toml
[package]
name = "daynumber2"
version = "0.1.0"
edition = "2024"

[dependencies]
time = { version = "0.3.55", features = ["std", "local-offset"] }
$ cargo build --release
   Compiling libc v0.2.189
   Compiling deranged v0.5.8
   Compiling powerfmt v0.2.0
   Compiling num_threads v0.1.7
   Compiling num-conv v0.2.2
   Compiling time-core v0.1.9
   Compiling time v0.3.55
   Compiling daynumber2 v0.1.0 (/mnt/mpt1/new2026/sorghum/_9462625/rustttrl/0000/daynumber2)
    Finished `release` profile [optimized] target(s) in 1.08s
$ ./target/release/daynumber2
Текущий день года: 256
$

С праздником!

saahriktu
()

Выключаем копипаст средней кнопкой мыши в красноглазом Niri (и используем её для других задач)

 , , ,

Здравствуйте, красноглазые нирийцы, который вздрагивают при одном упоминании Нокталии! Сегодня мы с вами будем перепиливать поведение мыши. Долой наследие иксов!

Итак, сначала идём и вписываем в ~/.config/niri/config.kdl

clipboard {
    disable-primary
}
Этого уже достаточно для отключения копипастинга мышью в Brave, telegram-desktop,... и т.д.

Для GTK можно добавить команду

dconf write /org/gnome/desktop/interface/gtk-enable-primary-paste false

Теперь добираемся до эмулятора терминала. Поскольку я перешёл на Wezterm (написан на нашем любимом Rust'е), то опишу для него. В ~/.config/wezterm/wezterm.lua надо добавить

config.mouse_bindings = {
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'NONE',
    action = act.Nop,
  },
  {
    event = { Up = { streak = 1, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.OpenLinkAtMouseCursor,
  },
  {
    event = { Up = { streak = 2, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
  {
    event = { Up = { streak = 3, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
}

Однако, это просто отключение. Но у нас освобождается целая кнопка! И её теперь можно использовать в разных сценариях. Например, для того же Wezterm'а можно прописать

config.mouse_bindings = {
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'NONE',
    action = wezterm.action.SendString 'elio\r',
  },
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'CTRL',
    action = wezterm.action.SendString 'eza --tree ./',
  },
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'ALT',
    action = wezterm.action.SendString 'btm\r',
  },
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'SHIFT',
    action = wezterm.action.SendString 'fd -t f . | fzf --preview "bat --style=numbers --color=always {}" | xargs hx',
  },
  {
    event = { Up = { streak = 1, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
  {
    event = { Up = { streak = 2, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
  {
    event = { Up = { streak = 3, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
}
Что это даёт в этом конкретном примере?

  • При нажатии средней кнопки мыши запустится файловый менеджер elio (написан на нашем любимом Rust'е (Niri тоже на Rust'е)).
  • При нажатии Ctrl+средняя кнопка мыши в командную строку вставится шаблон 'eza --tree ./' для запуска продвинутой альтернативы ls+tree с подсветкой и значками (написана на нашем любимом Rust'е).
  • При нажатии Alt+средняя кнопка мыши запустится системный монитор bottom (написан на нашем любимом Rust'е).
  • При нажатии Shift+средняя кнопка мыши в командную строку вставится шаблон 'fd -t f . | fzf --preview «bat --style=numbers --color=always {}» | xargs hx' для поиска и открытия файлов в текстовом редакторе helix (написан на нашем любимом Rust'е). Вместо find и less здесь используются fd и bat соответственно (написаны на нашем любимом Rust'е).

Enjoy!

saahriktu
()

AMD внедряет Rust в свои графические драйвера

 , , ,

Собственно, сабж: https://www.phoronix.com/news/AMD-Rust-Deep-Into-GPU-Stack .

AMD создает то, что они называют «элитной» командой разработчиков для внедрения кода Rust «глубоко в стек графических процессоров» от прошивки до драйверов, шейдерных компиляторов и другого программного обеспечения графических процессоров в Rust.

Ура!!! Rust рулит!!! 🦀

saahriktu
()

Сегодня UTF-8 исполнилось ((1<<4)+1)<<1 года

 , ,

Собственно, сабж.

fn main() {
    println!("Сегодня UTF-8 исполнилось {} года. Ура!!!", ((1<<4)+1)<<1);
}

saahriktu
()

Я теперь нириец!

 , ,

Собственно, сабж. Скриншотов пока не будет.

Перейти с Hyprland на Niri меня подтолкнул тот серьёзный минус из-за которого он популярен в первую очередь у юзеров того же Arch'а: его разработчик постоянно бежит впереди поезда с зависимостями для сборки. Поэтому в стабильных дистрибутивах быстро наступает момент, когда до перехода на следующую версию дистрибутива (которой пока ещё нет) обновить Hyprland просто нельзя. И юзер оказывается просто обречён жить с имеющимися багами. А автор Niri так не делает. И потому в стабильную ветку ALT Linux'а периодически таки приходят обновления Niri. А Hyprland там сейчас двухлетней давности.

Перечислю в двух словах что я докрасноглазил.

  • xdg-desktop-portal у меня отказывался нормально работать пока я не создал файл ~/.config/xdg-desktop-portal/portals.conf с таким содержанием:
    [preferred]
    default=gtk;
    org.freedesktop.impl.portal.FileChooser=gtk;
    
  • для xwayland'а надо доустановить xwayland-satellite и перелогиниться.
  • по дефолту при попадании курсора мыши в левый верхний угол включается режим overview. Это отключается добавлением в конфиг Niri
    gestures {
        hot-corners {
            off
        }
    }
    
  • для скриншотинга прописал
    Print { spawn-sh "grim -g \"$(slurp)\" - | wl-copy --type image/png"; }
    
  • 96 рабочих столов можно организовать через
    workspace "1" 
    workspace "2" 
    workspace "3"
    ...
    workspace "96"
    ...
        Mod+F1 { focus-workspace 5; }
        Mod+F2 { focus-workspace 6; }
        Mod+F3 { focus-workspace 7; }
        Mod+F4 { focus-workspace 8; }
        Mod+F5 { focus-workspace 1; }
        Mod+F6 { focus-workspace 2; }
        Mod+F7 { focus-workspace 3; }
        Mod+F8 { focus-workspace 4; }
        Mod+F9 { focus-workspace 9; }
        Mod+F10 { focus-workspace 10; }
        Mod+F11 { focus-workspace 11; }
        Mod+F12 { focus-workspace 12; }
    ...
        Mod+Alt+Shift+Ctrl+F10 { focus-workspace 94; }
        Mod+Alt+Shift+Ctrl+F11 { focus-workspace 95; }
        Mod+Alt+Shift+Ctrl+F12 { focus-workspace 96; }
    
  • window-rule {
        match app-id=r#"^(mpv|imv|feh|psi-plus)$"#
        open-floating true
    }
    

Ну и т.д.

Эмулятор терминала заменил на kitty и прописал Nirvana Launcher.

saahriktu
()

Вышла Mageia 10-rc1

 ,

Собственно, сабж. Напоминаю, что дистрибутив Mageia 2 года назад столкнулся с дефицитом маинтейнеров и сам Thomas Backlund говорил, что и релиза Mageia 10 не будет. Но команда маинтейнеров пока ещё делает свои дела и надеется на лучшее. Тем не менее, по мнению некоторых маинтейнеров релиз Mageia 10 может стать последним.

Скачать: https://mirror.yandex.ru/mageia/iso/10/ .

saahriktu
()

Доколе железо будет светиться как новогодние ёлки?

 , ,

Собственно, сабж. К мышам и клавиатурам ещё можно как-то привыкнуть, но это только вершина айсберга...

У меня уже был системник с игровым корпусом и к его подсветке я уже привык, она там нормально сделана. А тут купил новый системник с корпусом Deepcool CC560 V2 не ожидая засады от его инженеров... В общем, там в комплекте 4 кулера со встроенными светодиодами. Найти как отключить эту подсветку (не выкусывая светодиоды или не заменяя кулеры на другие) не может никто. Но это не было бы проблемой если бы она была бы нормальная. А тут она временами начинает пульсировать с большой частотой. Наверно, раз 5-10 в секунду, не меньше.

И дело не в косяках с питанием. Блок питания Corsair RM850x.

Хоть прячь куда-то этот системник... На данный момент он стоит слева от меня.

saahriktu
()

Провайдеры подписали мораторий на расширение каналов связи между Россией и Европой

 , ,

Собственно, сабж: https://www.rbc.ru/technology_and_media/16/04/2026/69dfc3f49a79474578e12a10 .

Кратко: около 20 владельцев сабжевых зарубежных каналов по инициативе «Минцифры» подписали мораторий на их расширение.

Логика «Минцифры»: люди активнее юзают VPN -> траффик VPN выглядит как зарубежный -> интернет каналы забиваются -> зарубежный траффик из-за дефицита начинает стоить как космический корабль -> людям VPN'ы становятся не по карману -> да здравствует Чебурнет! Ну, либо, народ массово бросает VPN'ы чем освобождает каналы для тех же Википедии и github'а.

saahriktu
()

Настраиваем тему Qt 6 через kvantum

 , , ,

Раньше я юзал qt6ct, но, к сожалению, софтина отказывается пересобираться с новымии версиями Qt 6. Поэтому пора переходить на kvantum. После его установки нужно его задействовать. У него есть ряд своих тем, но можно скачать альтернативные. Я сейчас опишу как установить тему rose-pine-pine.

Для начала нужно скачать архив темы с https://github.com/rose-pine/kvantum/tree/master/dist и распаковать в ~/.config/Kvantum/ .

Дальше нужно выполнить команду

kvantummanager --set rose-pine-pine

После этого прописываем в ~/.bashrc

export QT_STYLE_OVERRIDE="kvantum"
заодно удаляя строчки с упоминанием qt6ct.

После этого всё должно заработать. Enjoy!

saahriktu
()

Второапрельская программа от saahriktu (2026-й год)

 

Собственно, сабж:

#include <iostream>

int main() {
    std::cout << "saahriktu теперь " << [](int x) { return x * (x + 1); }(6) << " года." << std::endl;
    return 0;
}
Вариант на Perl:
print "saahriktu теперь " . (sub { $_[0] * ($_[0] + 1) }->(6)) . " года.\n";

saahriktu
()

Делюсь настройками Hyprland для Max'а

 , , ,

Собственно, сабж. Себе я его так настроил:

    windowrulev2 = fullscreen, class:^(MAX)$
    windowrulev2 = size 100% 100%, class:^(MAX)$
    windowrulev2 = immediate, class:^(MAX)$
    windowrulev2 = noblur, class:^(MAX)$
    windowrulev2 = noshadow, class:^(MAX)$
    windowrulev2 = noanim, class:^(MAX)$
    windowrulev2 = opaque, class:^(MAX)$
    windowrulev2 = decorate false, class:^(MAX)$
    windowrulev2 = suppressevent notify, class:^(MAX)$
    
    ...
    
input {
    ...
    float_switch_override_focus = 2
}

xwayland {
    force_zero_scaling = true
}
$ cat ~/.config/mako/config
[app-name="MAX"]
invisible=1
$ cat startmax.sh
#!/bin/bash
WINIT_UNIX_BACKEND=x11 vblank_mode=0 XWAYLAND_NO_GRAB=1 QT_SCALE_FACTOR=1.5 /usr/share/max/bin/max
$
Enjoy!

saahriktu
()

О том, почему люди юзают Telegram и Max в то время как есть IRC, Jabber и Matrix

 , ,

Решил вынести вопрос в отдельную тему чтобы получше его развернуть.

Итак, у каждого инструмента своя ниша и, очевидно, можно сидеть, например, одновременно и в Телеграме и в Джаббере. Зачем, почему недостаточно Джаббера? На этот вопрос я отвечу дальше.

Итак, Телеграмы и Максы раздуты не на пустом месте, а из-за предоставляемого функционала. Т.е. они сравнимы с Джабберами и Матриксами примерно как офисные пакеты с vim'ом и ed'ом. Да, не всем нужно больше, но... А в чём заключается это «больше» и как правильно его готовить?

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

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

Понятное дело, что можно поднять свой собственный сервер и наполнить его своим контентом, а потом кидать ссылки знакомым и друзьям в Джаббер. Так тоже можно, да. Но ссылки не дают гарантии доступности контента. А у разных людей из разных стран могут быть заблокированы разные ресурсы. У кого-то заблокирован Ютуб, у кого-то заблокирован Вконтакт, у кого-то заблокирован Рутуб, у кого-то заблокирован Яндекс-диск,... А так просто выкладываешь в экосистему мессенджера видео - и оно сразу гарантированно доступно всем участникам. Также можно, например, создать свой приватный канал (или даже пучок таких каналов), кидать туда разные материалы, а потом просто пересылать оттуда в разные чаты. Просто, быстро и удобно. И не надо выискивать по всему интернету ссылки на материалы, которые, вероятно, уже вообще удалены.

Понятное дело, что асоциальным единоличникам всё это может быть странно и непонятно. Но именно поэтому подобные мессенджеры и вытеснили IRC, оставив последний только тем, кто совсем не хочет ничего менять.

Теперь перейдём к рискам. А любая площадка - это в т.ч. и риски. Будь то ЛОР, reddit, Телеграм или Max. Никто их не отрицает, да.

Любая площадка сохраняет определённые следы действий юзера. Кого-то и по ЛОРу можно взять и деанонимировать, особенно с современными технологиями. В мессенджерах же люди действуют более открыто, хоть и сохраняя определённую приватность.

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

saahriktu
()

Сказ о том, почему в десктопном клиенте Max'а нужно закрывать меню не отходя от кассы

 , , ,

Здравствуйте, дорогие любители страшных историй у костра! Усаживайтесь поудобнее, расскажу я вам и свою историю.

Смотрю я, значит, что у меня почему-то внезапно разломалась раскладка. Особенно это было заметно по поведению mc: вместо простого перемещения стрелочками работало ещё и выделение, Tab не применялся, а при нажатии Enter вводилась точка. Начал я разбираться что стало причиной и как это починить обратно...

Оказалось, что это было потому, что... я в клиенте Max'а из https://download.max.ru/linux/alt/ клацнул на зелёный «+», вылезло меню, и я забыл его закрыть. А в другом софте это, соответственно, обрабатывалось как зажатый модификатор. Закрыл то меню в клиенте Max'а и всё стало OK. Вот так вот.

ЗЫ. Окружение, если что, Hyprland (Wayland).

saahriktu
()

Google озверел перекручивать секурность в Chromium'е

 , , , ,

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

Внезапно частично разломался https://chat.qwen.ai в Chromium'е и Brave (в ванильном Chromium'е ситуация выглядит получше, но всё равно всё плохо). Например, не отображаются сгенерированные картинки. При этом с самой генерацией всё OK, проблема с загрузкой ресурсов из 3rd party источников, что приводит к бесконечной загрузке изображения.

При этом в том же Firefox'е всё OK.

saahriktu
()

Разработчики Flatpak собираются добавить в systemd новый компонент systemd-appd

 , ,

Собственно, сабж: https://www.phoronix.com/news/systemd-appd-Flatpak-Dev .

Sebastian Wick and Adrian Vovk are planning to develop «systemd-appd» as a new service to allow querying running app instances. The plans for systemd-appd are for being able to authenticate Flatpak instances and working towards a goal of supporting nested sandboxing. This will also be useful for work around PipeWire, eliminating the D-Bus proxy, and other modernization work.

saahriktu
()

Фиксим копипастинг из alice.yandex.ru как настоящие линуксоиды.

 , ,

Ещё некоторое время назад на сайте alice.yandex.ru можно было выделить мышкой вопрос и ответ чтобы скопипастить в файл. Теперь же вместе с нужным текстом в буфер копируется и текст с боковой панели. Но это решаемо. Вариант с установкой дополнительных расширений я рассматривать не буду как недостаточно хакерский.

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

location.reload(true);
const sheet = new CSSStyleSheet();
sheet.replaceSync(`
    .Standalone-Sidebar {
        user-select: none !important;
        -moz-user-select: none;
        -khtml-user-select: none !important;
        -webkit-user-select: none;
    }
`);
document.adoptedStyleSheets = [sheet];
После этого можно протягивать текст мышкой и вставлять средней кнопкой в vim.

Enjoy!

saahriktu
()

Ты готов к снопам, $USER ?

 , ,

Собственно, в ядре 6.18 ожидается такая оптимизация как «снопы» («sheaves»): https://www.phoronix.com/news/Linux-6.18-Likely-Sheaves .

Это дополнительная прослойка поверх SLUB'а, которая будет кэшировать массивы данных для каждого CPU в отдельности, за счёт чего ожидается прирост производительности.

saahriktu
()

initrd всё

 , ,

Собственно, сабж: https://www.phoronix.com/news/Initrd-Linux-Try-Removing-2025 .

dropping initrd in favor of going all-in on initramfs moving forward

saahriktu
()

Разработчики X.org устраняют из кода диверсии разработчика X11Libre

 , ,

Собственно, сабж: https://www.phoronix.com/news/X.Org-Server-Lots-Of-Reverts .

There was this revert for not handling copyright and license notices correctly.
...
Also merged this week was this big revert of prior «RandR cleanups» that ended up breaking at least some RandR functionality.

There was also a revert to avoid unnecessarily breaking the NVIDIA driver. It was also commented by NVIDIA that some additional requests for other reverts are coming too.

There were also other reverts for code of questionable value. And other reverts making changes without knowing the prior knowledge for why some macros were added in the first place by X.Org developers.

And the list goes on with more reverts expected soon.

{парагаф про X11Libre} ...It's highly unlikely to succeed long-term given the very limited experienced developers / resources and none of the major Linux stakeholders (companies) backing it.

saahriktu
()

Вышел PikaOS Linux 25.06.07.

 , , ,

Собственно, сабж: https://wiki.pika-os.com/en/home .

PikaOS - это английский геймерский дистрибутив основанный на нестабильном Debian'е с логотипом в виде птички в цветах Пикачу.

Помимо GNOME и KDE из коробки опционально также обещают версию с Hyprland'ом.

saahriktu
()