LINUX.ORG.RU

Сообщения MOPKOBKA

 

Linux непригоден для просмотра котиков

Решил запустить последний RoboCop на Linux, в меню меня встретили фризы в пару секунд, поэтому я побежал в магазин за новой видеокартой, но фризы не прошли, и я поставил Windows, а там тоже самое! Оказалось нужно просто подождать 10-20 секунд, и больше такого не будет, даже при следующем запуске.

Но под протоном испорчены разные вещи, например коты

Proton - https://ibb.co/g7KHmw6

Win - https://ibb.co/6byWNF8

 ,

MOPKOBKA
()

Red Hat угощает Wayland-ом разработчиков Firefox

Мартин Странски из Red Hat написал Wayland-Proxy как C++-версию предыдущей экспериментальной концепции, написанной на Rust

Среди ошибок Firefox Wayland одна из самых распространенных ошибок связана с потерей соединения с компоновщиком Wayland. Чтобы справиться с этим, необходимо иметь прокси-сервер между Firefox и компоновщиком Wayland для кэширования сообщений и предотвращения переполнения очереди сообщений компоновщика.

В комментариях разбирают подробнее

Mutter (и, возможно, другие) завершает работу клиента Wayland, если он распознается как зависший. Обычно это означает, что клиент Wayland недостаточно быстро читает сообщения из сокета дисплея Wayland и буфера вывода сообщений компоновщика. заполнено. Это может быть ошибка в самом приложении (цикл событий не обрабатывается) или это вызвано устройствами ввода, такими как мышь с частотой 1000 Гц, которая генерирует слишком много событий.

Такая ошибка действительно есть, любители Wayland с высокой герцовкой мыши, ранее делились советами не двигать мышкой когда открыт Firefox, иначе это может немедленно привести к его закрытию.

https://www.phoronix.com/news/Wayland-Proxy-Firefox

 

MOPKOBKA
()

ДИН, почему забанили космоспеца?

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

www.linux.org.ru/people/kompospec/profile

 ,

MOPKOBKA
()

Может ли быть software rendering лучше hardware (сюда отнесу OpenGL) по задержке?

Можно заметить что без композитора чистые X11 приложения ощущаются намного более отзывчивыми и быстрыми, так же на Windows приложения использующие GDI с выключенным композитингом чувствуются очень хорошо, в чем причина?

Композитинг тормозит из за того что окна выводятся в промежуточные буферы а потом копируются в итоговый?

 ,

MOPKOBKA
()

Debian/Ubuntu собрать Emacs только с gtk (deb)

Делаю

apt source emacs
если выполню
fakeroot rules/binary
то он начнет собирать со всеми фронтендами, а нужно только с gtk. Как мне это указать?

Нужно https://packages.debian.org/buster/emacs-gtk

Собирает:
https://packages.debian.org/buster/emacs-nox
https://packages.debian.org/buster/emacs-gtk

 , ,

MOPKOBKA
()

gtk3, как сделать такую таблицу

Есть таблица (TreeView) вида

+------+------+------+
| Заг1 | Заг2 | Заг3 |
+------+------+------+
| 1234 | 1234 | 1234 |
+------+------+------+
| 1234 | 1234 | 1234 |
+------+------+------+
| 1234 | 1234 | 1234 |
+------+------+------+
| 1234 | 1234 | 1234 |
+------+------+------+

Нужно добавить под каждую строку прогресс бар, размером с (Заг1+ Заг2), при этом остальные столбцы должны быть выравнены.

+------+------+------+
| Заг1 + Заг2 | Заг3 |
+------+------+------+
| 1234 | 1234 | 1234 |
+------+------|      |
+ #######.... |      |
+------+------+------+
| 1234 | 1234 | 1234 |
+------+------|      |
+ #######.... |      |
+-------------+------+
| 1234 | 1234 | 1234 |
+------+------|      |
+ #######.... |      |
+-------------+------+

Как это сделать?

 

MOPKOBKA
()

Как научить человека пользоваться компьютером?

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

Что можно такому человеку предоставить на русском языке по Linux? С упором на вещи которые можно применять в обычной жизни, то есть лучше что бы не был упомянут chmod, а было упомянуто как перекинуть файлы на флешку, как заполнить форму в LibreOffice итд. Что бы проходились поверхностно, но по нужным вещам.

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

 

MOPKOBKA
()

А почему у Gtk еще нету официальной React-подобной библиотеки поверх?

Вот смотрю на то как в Rust делают приложения на Gtk, и очень удивляюсь, неужели кому то нравится писать вручную все эти интерфейсы в императивном стиле? А ведь пишут, еще обходя все проблемы, которые исходят из того что у Gtk свой подход к управлению памятью который на Rust не налазит, как и наследование компонентов, из за чего в Rust пришлось добавлять «классы» через макросы - https://gtk-rs.org/gtk4-rs/stable/latest/book/g_object_subclassing.html

Есть ли какая то проблема в создании libgtk-react, где можно будет описывать интерфейс декларативно, с использованием javascript, с удобным получением данных из C++ или Python части?

Вроде есть какие то библиотеки, но они нигде не используются как я понял.

 , ,

MOPKOBKA
()

NVIDIA, EDID и ttyX, как избавиться от «Вход не поддерживается»?

После установки драйверов nvidia-driver:525, после запуска Xorg, если переключиться в tty монитор писал «Вход не поддерживается», переключение обратно в xorg tty не помогало. После добавления в xorg.conf

Section "Screen"
  Option "UseEDID" "False"
EndSection
Переключение обратно в xorg начало приводить к тому, что xorg нормально отображается. Но в tty все равно «Вход не поддерживается», его я никак после запуска xorg увидеть не могу.

Как я понял, проблема в том что переключение на tty пытается ввести монитор в какой то неправильный режим, но как его сделать правильным?

Пробовал ставить по отдельности и вместе nomodeset, nvidia-drm.modeset=1, nvidia-drm.modeset=0, drm.edid_firmware=edid/custom_edid.bin где custom_edid.bin это то что я сгенерировал находясь в графической сессии с помощью nvidia-settings, но ничего не помогло.

В Wayland вообще всегда нет сигнала, как и в tty, как я понимаю настроив tty я смогу и им пользоваться.

Debian 12, Linux 6.1.0, NVIDIA 525.105.17, RTX 3060 LHR

Монитор https://www.dns-shop.ru/product/483fcc72d53b3332/238-monitor-acer-ka242ybi-ce...

Видеокарта https://www.dns-shop.ru/product/49b77a8077562eb0/videokarta-kfa2-geforce-rtx-...

 , ,

MOPKOBKA
()

Баг в названии опроса

www.linux.org.ru/vote-vote.jsp?msgid=17134667

Опрос тут называется:

«Рукость» ЛОРовца: какая рука у вас преобладающая?
Напрягают
«
и
»
maxcom

 

MOPKOBKA
()

Какой VPN поставить на сервер?

Однажды я смог настроить PPTP, но теперь не получается, пробовал WireGuard но там какие то интерфейсы, пиры, ключи, вроде переменных меньше, но слишком сложно, я вообще ничего не понял. Для OpenVPN какие то ключи надо делать, конфиги писать, iptables запускать, неужели еще ничего не придумали простого? И что бы NetworkManager поддерживал.

 

MOPKOBKA
()

Как приходят в Kali Linux

Многие на ЛОРе жалуются, что люди выбирают Kali Linux просто так первым дистрибутивом, в погоне за любимым персонажем из фильма например, и советуют вместо этого читать книжки о Linux, изучить а там уже приступать. Ну и вот что там написано в этих самых книгах, как раз о той самой установке Kali Linux с нуля!

Страницы из книги

Перемещено hobbit из screenshots

 

MOPKOBKA
()

Docker Compose привязка к домену + порту

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

Если все проекты на Apache2 + PHP, без докера, то я бы использовал VirtualHosts, сделал бы для каждого проекта домен, и тестировал бы все там.

А что можно сделать в docker, docker compose из подобного? Идеальным решением было бы привязать docker-compose.yml к домену, что бы:

curl project-a.dev:8080 это /dev/project-a/docker-compose.yml::httpd

curl project-b.dev:8080 это /dev/project-b/docker-compose.yml::httpd

Как это реализовать?

 ,

MOPKOBKA
()

Программа для заметок

С поддержкой синхронизации для Android, и возможностью поставить сервер на своей впске. Что есть? Желательно минималистичное. Возможно достаточно пары утилит и блокнота?

 

MOPKOBKA
()

А за что забанили metaprog?

Заморозка - понятно. А бан из за чего прилетел сейчас? Верните все взад.

maxcom, hobbit

 

MOPKOBKA
()

Убрать выскакивающие меню в Electron приложениях для Gnome 3

Например в Ubuntu, если использовать приложения на Electron, такие как Skype, VSCode, Atom, OnlyOffice, то можно столкнутся с неприятным багом, когда нажатие Alt+Shift открывает меню.

Как я это исправил:

  • Отключить в настройках все бинды на Alt+Shift, в том числе и переключение раскладки в Gnome Tweaks
  • Создать файл /usr/bin/switch-keyboard-layout.sh
    #!/bin/bash
    LAYOUT=$(setxkbmap -print | awk -F + '/xkb_symbols/ {print $2}')
    if [ "$LAYOUT" == "ru" ]
      then `/usr/bin/setxkbmap us`
      else `/usr/bin/setxkbmap ru`
    fi
    
    if [ "$LAYOUT" == "ru" ]; then
      gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval  "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"
    else
      gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval  "imports.ui.status.keyboard.getInputSourceManager().inputSources[1].activate()"
    fi
    
  • Сделать
    chmod +x /usr/bin/switch-keyboard-layout.sh
  • В домашнюю папку вписать файл keybinder.py
    #!/usr/bin/env python3
    import subprocess
    import sys
    
    # defining keys & strings to be used
    key = "org.gnome.settings-daemon.plugins.media-keys custom-keybindings"
    subkey1 = key.replace(" ", ".")[:-1]+":"
    item_s = "/"+key.replace(" ", "/").replace(".", "/")+"/"
    firstname = "custom"
    # get the current list of custom shortcuts
    get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
    array_str = get("gsettings get "+key)
    # in case the array was empty, remove the annotation hints
    command_result = array_str.lstrip("@as")
    current = eval(command_result)
    # make sure the additional keybinding mention is no duplicate
    n = 1
    while True:
        new = item_s+firstname+str(n)+"/"
        if new in current:
            n = n+1
        else:
            break
    # add the new keybinding to the list
    current.append(new)
    # create the shortcut, set the name, command and shortcut key
    cmd0 = 'gsettings set '+key+' "'+str(current)+'"'
    cmd1 = 'gsettings set '+subkey1+new+" name '"+sys.argv[1]+"'"
    cmd2 = 'gsettings set '+subkey1+new+" command '"+sys.argv[2]+"'"
    cmd3 = 'gsettings set '+subkey1+new+" binding '"+sys.argv[3]+"'"
    
    for cmd in [cmd0, cmd1, cmd2, cmd3]:
        subprocess.call(["/bin/bash", "-c", cmd])
    
  • Запустить из домашней папки
    python3 keybinder.py 'keyboard layout switch' '/usr/bin/switch-keyboard-layout.sh' '<Alt>Shift_L'
    после чего keybinder.py удалить, или дальше использовать

Можете предлагать свои варианты!

 ,

MOPKOBKA
()

Telegram из tar.gz перестал выводить звук через pipewire 0.3.43

Смотрю через pavucontrol, как выводящее приложение telegram появляется, но полосочка громкости не скачет, но если переключиться на pulseaudio, то и полосочка скачет, и звук играет. Кто сталкивался?

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

 

MOPKOBKA
()

Как создать массив в С++

Нужно создать массив с элементами у которых разный размер. Размер массива, элементов, и их порядок известен в compile-time. В коде могу представить так:

template<int N = 5>
struct A {
  std::array<int, N> = {
    // Вот эти значения должны как то создаваться автоматически
    // 1...N, N = 5
    std::array<int, 1>,
    std::array<int, 2>,
    std::array<int, 3>,
    std::array<int, 4>,
    std::array<int, 5>, 
  };
};


template<int N = 3>
struct B {
  std::array<int, N> = {
    // Вот эти значения должны как то создаваться автоматически
    std::array<int, 1>,
    std::array<int, 2>,
    std::array<int, 3>,
  };
};

Есть что то готовое, что можно использовать, и работающее в компилтайме?

-----------------------------------------------------

Первое решение:

#include <type_traits>
#include <iostream>
#include <tuple>
#include <array>

template <typename... Ts>
class tuple_array_t : public std::tuple<Ts...> {
public:
    using std::tuple<Ts...>::tuple;

    template <size_t N>
    constexpr auto&& operator[](std::integral_constant<size_t, N>) {
        return std::get<N>(*this);
    }

    [[nodiscard]] constexpr auto size() const {
        return std::integral_constant<std::size_t, std::tuple_size_v<decltype(static_cast<std::tuple<Ts...>>(*this))>>();
    }
};

template <std::size_t From, std::size_t To, class F>
constexpr void constexpr_for_range(F&& f) {
    if constexpr (From < To) {
        f(std::integral_constant<size_t, From>());
        constexpr_for_range<(std::size_t)From + 1, (std::size_t)To>(f);
    }
}

template<typename T, size_t N, typename... Ts>
constexpr auto linear_tuple_array() {
    if constexpr (N > 1) {
        return linear_tuple_array<T, N - 1, Ts..., std::array<T, N>>();
    } else {
        return tuple_array_t<Ts..., std::array<T, N>>();
    }
}

constexpr auto generate_super_array() {
    auto linear_array = linear_tuple_array<float, 10>();
    auto linear_array_size = linear_array.size();
    constexpr_for_range<0, linear_array.size()>([&] (auto i) {
        constexpr auto n = linear_array_size - i;
        constexpr_for_range<0, n>([&] (auto j) {
            linear_array[i][j] = i * 1000 + j;
        });
    });
    return linear_array;
}

int main() {
    auto array = generate_super_array();

    auto x = std::integral_constant<std::size_t, 5>();
    auto y = std::integral_constant<std::size_t, 3>();
    
    // #output: 5003
    std::cout << array[x][y] << std::endl;
}

------------------------------------------------
Второе решение

#include <cstddef>
#include <type_traits>
#include <iostream>

template <typename T, size_t N>
class ctmat;

template <typename T>
class ctmat<T, 1>
{
public:
    template <size_t i, size_t j>
    typename std::enable_if<i == 0 && j == 0, T>::type& get() { return m_v[0]; }
    template <size_t i, size_t j>
    typename std::enable_if<i == 0 && j == 0, T>::type const& get() const { return m_v[0]; }
    template <typename U>
    friend std::ostream& operator<<(std::ostream& out, const ctmat<U, 1>& m);
private:
    T m_v[1];
};

template <typename T, size_t N>
class ctmat: public ctmat<T, N-1>
{
public:
    typedef ctmat<T, N-1> base_type;
    using base_type::get;
    template <size_t i, size_t j>
    typename std::enable_if<i == N-1 && j < N, T>::type& get() { return m_v[j]; }
    template <size_t i, size_t j>
    typename std::enable_if<i == N-1 && j < N, T>::type const& get() const { return m_v[j]; }
    base_type& base() { return static_cast<base_type>(*this); }
    base_type const& base() const { return static_cast<const base_type&>(*this); }
    template <typename U, size_t M>
    friend std::ostream& operator<<(std::ostream& out, const ctmat<U, M>& m);
private:
    T m_v[N];
};

template <typename T>
std::ostream& operator<<(std::ostream& out, const ctmat<T,1>& m)
{
    out << m.m_v[0] << std::endl;
    return out;
}

template <typename T, size_t N>
std::ostream& operator<<(std::ostream& out, const ctmat<T, N>& m)
{
    out << m.base();
    for (size_t j = 0; j != N; ++j)
        out << m.m_v[j] << ' ';
    out << std::endl;
    return out;
}

int main()
{
    ctmat<int, 1> m1;
    static_assert(sizeof(m1) == sizeof(int), "Unexpected size");
    m1.get<0,0>() = 1;
    //m1.get<1,0>() = 2;
    //m1.get<0,1>() = 3;
    std::cout << m1;
    ctmat<int, 2> m2;
    static_assert(sizeof(m2) == 3*sizeof(int), "Unexpected size");
    m2.get<0,0>() = 4;
    //m2.get<0,1>() = 5;
    m2.get<1,0>() = 6;
    m2.get<1,1>() = 7;
    std::cout << m2;
    return 0;
}

 

MOPKOBKA
()

Wine сбивает значки на рабочем столе при изменении видео-режима

Можно ли как то заставить его не менять видео-режим, а просто создавать full-screen окно и самому растягивать изображение? Эмуляция рабочего стола создает рамку, немного не то.

 

MOPKOBKA
()

Почему когда пишут скрипты на Bash не используют фреймворки?

Очевидно что они ускоряют написание скриптов, упрощают, и помогают избегать ошибок. Как пример возьмем: https://github.com/niieani/bash-oo-framework

Почему же люди продолжают непрофессионально подходить к этому делу, и пишут чуть ли не в sh-стиле? Такое ощущение что они не сталкивались с реальным миром.

А еще труднее понять почему при написании скриптов не используют нормальную IDE с отладчиком?! Не знают? Не могут научиться?

Да, конечно Bash уже устарел, но это не повод погружаться в 60-е если нужно его использовать.

 ,

MOPKOBKA
()

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