LINUX.ORG.RU

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

Как получить цвета из дефолтной темы GTK+3?

Форум — Development

В общем, нужно получить цвета из дефолтной темы в рантайме внутри кода на Си. Как это быстрее и проще всего сделать?

Старые методы, которыми полнится инет, не работают, а с CSS-темингом я пока не разобрался.

 , , ,

meliafaro
()

Динамические библиотеки, конспект

Форум — Development

Привет. Так вышло, что пришлось основательно разобраться в теме и пока память свежа изложил всё в виде небольшой памятки. Удобно по прошествии некоторого времени освежить память прочитав небольшой конспект. Вообще, по-хорошему, блог что ли какой завести )). Просьба - не флудить, ссылки/комментарии/дополнения по теме приветствуются. ЗЫ: подразумевается, что либы -fpic

1. Утилиты readelf, objdump. Читать man elf, man ld.so. N в именах структор
   подразумевает 32 или 64.
2. Структура ELF файла:
   1. заголовок (смещение 0, struct ElfN_Ehdr). Readelf::ELF Header
   2. program header table (массив struct ElfN_Phdr). Содержит информацию о том
      как отображать секции в память процесса. Readelf::Program Headers
   3. section header table (массив struct ElfN_Shdr). Readelf::Section Headers
3. link_map   
3.1. Загруженные в память модули попадают в список (массив) из struct link_map.
     Списков может быть много, каждый список - "пространство имён". Для
     загрузки модулей в неглобальный список (создание нового) используется
     dlmopen().
3.1. Получать link_map модуля через dlinfo() или dladdr1():
     [--code--]
     #define _GNU_SOURCE
     #include <link.h>
     #include <dlfcn.h>
     #include <stdio.h>
     int main()
     {
        static char addr_in_mod;
        Dl_info __info;
        struct link_map *lm;
        if(dladdr1(&addr_in_mod, &__info, (void*)&lm, RTLD_DL_LINKMAP) != 0) {
           printf("link_map:\n");
           struct link_map *i = lm;
           for(; i->l_prev != NULL; i = i->l_prev);
           for (; i != NULL; i = i->l_next)
              printf("addr diff=%p  name=%s%s",(void*)i->l_addr,  i->l_name, i==lm?"  <--cur\n":"\n");
        }
     }
     //output:
     //link_map:
     //addr diff=0x41f000  name=  <--current module
     //addr diff=0xb7fc4000  name=linux-gate.so.1
     //addr diff=0xb7fa3000  name=/lib/libdl.so.2
     //addr diff=0xb7dc5000  name=/lib/libc.so.6
     //addr diff=0xb7fc6000  name=/lib/ld-linux.so.2
     [/--code--]
3.2. Во время переразмещений символ ищется в модулях указанных в link_map
     списке начиная от начала списка т.е. порядок важен, "gcc -ls1 -ls2"
     libs1.so находится в списке раньше, чем libs2.so.
3.3. При добавлении библиотеки через LD_PRELOAD, она попадает перед остальными
     разделяемыми библиотеками в глобальном link_map списке.
3.4. Опция RTLD_DEEPBIND для dlopen - собственные символы модуля приоритетнее
     символов из вышестоящих в link_map списке модулей.
     Собственные символы загружаемой библиотеки содержат:
      1. символы из самой загружаемой библиотеке
      2. символы из библиотек, которые были слинкованы с загружаемой из
         командной строки (у первых приоритет выше).
3.5. При загрузки через dlopen, библиотеки добавленные с флагом RTLD_GLOBAL
     имеют приоритет над RTLD_LOCAL, не смотря на то, что находятся в link_map
     списке позже (не относится к получению void f() через dlsym()). Например:
     [--code--]
     // предоставляет void f(), ссылается на void f().
     dlopen("lib1.so", RTLD_LOCAL);
     // предоставляет void f().
     dlopen("lib2.so", RTLD_GLOBAL);
     // при ленивом переразмещении, lib1.so будет ссылаться на lib2.so::f().
     [/--code--]
4. RTLD_GLOBAL - символы из загруженного модуля будут участвовать в
   переразмещениях для заргуженных в дальнейшем библиотек. RTLD_LOCAL - не будут.
   Если lib2.so линкуется с lib1.so через командную строку
   "gcc -fpic -shared -l2 s.c -o lib1.so", то видимость символов из lib2.so
   наследуется от видимости символов из lib1.so:
   [--code--]
   dlopen("./lib1.so", RTLD_LAZY|RTLD_GLOBAL);    // символы из lib2.so глобальные
   dlopen("./lib1.so", RTLD_LAZY|RTLD_LOCAL);     // символы из lib2.so локальные
   [/--code--]
   Если lib2.so подгружается из lib1.so через dlopen(), то видимость символов
   из lib2.so контролируется флагом dlopen() при загрузке lib2.so. Способ
   загрузки (через командную строку или dlopen) и флаг для dlopen при
   загрузки lib1.so значения не имеет.
5. Переразмещение (relocation).
5.1. Переразмещение - процесс соединения символьной ссылки с символьным
     определением.
     Переразмещение: ленивое - загрузчик вызывается при ссылке на символ, и
     ненеленивое - переразмещение при загрузке. Переразмещение переменных всегда
     неленивое.
5.2. Символы, требующие переразмещения, содержатся в .rel... секциях. В них
     находятся ElfN_Rel структуры.
     [--code--]
     typedef struct {
         Elf32_Addr r_offset;    \\ адрес внесения правки (адрес в GOT, например. readelf::Offset).
         uint32_t   r_info;      \\ содержит тип переразмещения и индекс в таблице символов (массив Elf32_Sym[]).
     } Elf32_Rel;
     typedef struct {
         uint32_t      st_name;   \\ индекс в таблице строк. Т.е. сопостовляет символ с Си строкой.
         Elf32_Addr    st_value;  \\ адрес символа в текущем модуле (readelf::Sym.Value).
         uint32_t      st_size;
         unsigned char st_info;
         unsigned char st_other;
         uint16_t      st_shndx;
     } Elf32_Sym;
     [/--code--]
5.3. Механизм обращения к переменным (требующим переразмещений):
     1. линкер на старте правит .got секцию, она начинает указывать на нужные
        данные.
     2. ссылка на переменную в коде (в .text секции):
          [--code--]
          call   44c <__x86.get_pc_thunk.ax>  # получаем в eax адрес следующей инструкции
          add    $0x1bcb,%eax                 # в eax адрес .got секции
          mov    0x14(%eax),%edx              # отступ от края .got на адрес переменной,
                                              # разыменовываем в edx
          [/--code--]
5.4. Механизм обращения к функциям, для пример - exfn():
     1. ссылка на exfn() в коде (в .text секции)
     2. переход на "трамплин" в .plt секции - plt@exfn()
     3. переход на разыменованный указатель из .got.plt, если переразмещение
        уже было произведено, то попадаем на exfn(), иначе:
        3.1. возврат в plt@exfn(), в стек кладётся смещение в .rel.plt
             секции Elf32_Rel структуры и указатель на link_map список
        3.2. вызов ld.so, правится указатель в .got.plt
        3.3. переход на exfn().
6. .dynamic секция может быть прочитана из программы через массив _DYNAMIC[],
   который содержит struct ElfN_Dyn, автоматически заполняется линкером.
7. Экспортируемые символы из elf модуля указываются в .dynsym секции.
8. -rdynamic опция линкера (для исполняемого ELF) - символы из exe, которые не
   были востребованы библиотеками, указанными в командной строке, не
   экспортируются (не указываются в .dynsym секции) и не участвуют в
   переразмещениях в библиотеках, которые подргружаются через dlopen. Данная
   опция заставляет линкер помещать в таблицу все функции.
9. Управление экспортом из модуля
   * Управление экспортом по умолчанию:
     gcc -fvisibility=default
     -fvisibility=hidden
     -fvisibility=internal
     -fvisibility=protected
   * Управление экспортом посимвольно:
     __attribute__ ((visibility ("hidden")));
     __attribute__ ((visibility ("hidden")))
   * Для группы:
     #pragma GCC visibility push(hidden)
     ...
     #pragma GCC visibility pop
   * static и анонимные namespace
   * Управление эспортом через export map, через опцию --version-script

 , , ,

pavlick
()

Способы выстрелить себе в ногу

Форум — Development

Раз уж сегодня день нубских вопросов... Господа, делитесь способами стрельбы себе в ногу (или сразу в голову). Начну первым: вызвать чисто виртуальную функцию. Ну и классика жанра - указатели.

 ,

Meyer
()

DIY «Собери свой роутер»

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

На фото самосборный роутер. Стоит матплата из серии pc engines, 2 mpcie модуля Mikrotik для обеспечения wifi сети 5Ghz и 2.4 Ghz. Загружается и работает на openwrt ( хотя любой линукс поддерживается тоже ). Из напильника - пришлось просверлить 3 доп. отверстия для антенны ( непонятно почему не сделали это по умолчанию ). Как бонус можно добавить еще 2 ethernet порта через mcpie карту.

Цена получилась немного больше стоимости топовых роутеров.

>>> Просмотр (1139x873, 1791 Kb)

 

Jopich1
()

Ноутбук за 35-40 тысяч рублей

Форум — Linux-hardware

Нынче возможно за такие деньги купить более-менее нормальный ноутбук? Мне не нужны игры: только интернет, видео, музыка, LibreOffice и GIMP/Krita. Важно, чтобы он был надёжным, прожил долго и не тормозил от большого количества вкладок.

Ещё вопрос такой: допустим, мне понравился DELL Vostro 5568. У него неплохой процессор Intel Core i5-7200U 2.5ГГц, 8 гигабайт оперативки и SSD на 250 гигабайт. Но видеокарта Intel® HD Graphics 620. Она ведь подойдёт для неигровых задач? Или всё же будет мешать отсутствие нормальной видеокарты? Вопрос касается не только этого ноутбука, а вообще всех, у которых нормальные характеристики и видеокарта-затычка.

Подкиньте вариантов и помогите сориентироваться на рынке. Не разбираюсь от слова вообще.

 , , ,

grey_circle
()

Си/Си++: отличие массивов от указателей

Форум — Development

sizeof массива возвращает размер массива, sizeof указателя - лишь размер самого указателя. А ещё? В куче учебников есть оговорки, что в ряде других специфических ситуаций поведение компиляторов в отношении подобных переменных различается, но примеров навскидку найти не могу. В гугле был, в стандарте копаться лень.

 , , ,

meliafaro
()

Запись на флешку: скачок и подвисание.

Форум — Desktop

В CentOS7 используя Nautilus закидываю _на_ флешку 460.7MB файл. Статус сразу скачет до 459.6MB и работа продолжает кипеть. Т.к. флешка медленная, то минуты 2! Затем «460.7MB» и ок.

Черт возьми, это достало! Жутчайший треш в интерфейсе, не отражающий состояние системы. Другие ФМ делают тоже самое! Корни где-то ниже уровнем. Даже rsync, с указанием --progress, ничего не показывает, пока не запишется 99% файла.

Причем в обратную сторону, с флешки, копируется равномерно.

Что заметил: даже запуская «sync» - он не отрабатывает, пока не запишется файл на флешку целиком.

Как заставить Linux писать на флешку по-нормальному, кусками например, по 5MB?

UPD уточнение про rsync: rsync отрабатывает за секунду, показывая «sent 460,857,140 bytes received 35 bytes 307,238,116.67 bytes/sec», потом флешка продолжает минуту мигать. Асинхронность, мать её.

 , , ,

Deleted
()

Вопросы по C, и вообще.

Форум — Development

Будем считать что я пишу прикладные программки.

  1. Как лучше обрабатывать malloc == NULL? Игнорировать или кидаться аbort() не хочется, но обработать нужно, обрабатывать каждый вызов?
  2. Писать свои строки или есть библиотека? Строки хранить как utf8 или utf32?
  3. Динамические массивы, писать свои, есть готовые? Как находить оптимальный размер для увеличение массива при расширении, нужно ли вообще заранее выделять память?
  4. Куда лучше выводить ошибку? Можно в консоль, но на винде не прокатит вроде, плюс ничего не видно.
  5. Нормальная ли идея: Есть много строк по 3-16 символов, сделать MyMemAllocate который при выделении (64 > X) байт, выделяет память в уже аллоцированном буфере на пару мегабайт к примеру... А при MyMemRealloc(X > 64) перемещает память из этого буфера в системную кучу. Перед данными хранить байт отвечающий за тип кучи.
  6. Когда структуру нужно передавать через стек а когда по указателю?
  7. на x86_64 быстрее uint32_t или uint64_t?
  8. for(...;i != len;...) vs for(...;i < len;...)
  9. Всегда ли ((unsigned)0-1) == ((unsigned)0-1)?
  10. На чем быстро рисовать графику (картиночки, кнопочки)? SDL2 говорят медленный.
  11. Есть много текста, с разным шрифтом, разным размером. Как лучше такое рисовать? (ttf), нарисовать алфавит для каждого {размер+шрифт}, или нарисовать алфавит с очень большим размером а потом сжимать для буков меньшего размера? Рендерит кто нибудь TTF на видеокарте кстати?
  12. Есть много объектов с одинаковыми и неизвестными именами, делать отдельную структуру (в виде чего?) где будут храниться эти имена дабы не занимать память одинаковыми строками?
  13. Как лучше хранить значения key:value что бы быстро с ними работать?
    1. если значений мало,
    2. если значений много.
  14. Можно ли как то поставить обработчик на изменение участка памяти? Костыль, но нужно. (Win/Linux хотя бы)
  15. Актуальна ли для современных систем фрагментация кучи?
  16. Какие библиотеки есть для многопоточного? Что можно почитать? SDL_Thread тоже медленный?
  17. Вот допустим решил я распарсить INI файл, как лучше его читать? По линиям? Сразу весь? Проецировать?
  18. Библиотека для RegExp?
  19. Какие флаги для строгости компилятора юзать стоит? Я использую: -std=c89 -Wall -pedantic

Ну или можно книжку где это расписанно.

 ,

linuhs_user
()

RESTinio: header-only, кросс-платформенная библиотека для встраивания HTTP сервера с удобным express-like маршрутизатором

Форум — Development

RESTinio - это header-only, кросс-платформенный инструмент для встраивания HTTP сервера с удобным express-like маршрутизатором и вебсокетами. Главная задачей RESTinio является упрощение асинхронной обработки запросов. Чтобы, грубо говоря, обработчик спокойно мог потратить 15 секунд на формирование ответа, но это бы не влияло на параллельные запросы.

RESTinio с самого начала создавался так, чтобы его с одной стороны было удобно использовать, а с другой, чтобы он был производительным и масштабируемым. RESTinio с самого начала написан с использованием C++14.

Вот как будет выглядеть простейший http-сервер, который отвечает на все запросы hello-world сообщением:

#include <restinio/all.hpp>

int main()
{
  restinio::run(
    restinio::on_this_thread()
      .port(8080)
      .address("localhost")
      .request_handler([](auto req) {
        return req->create_response().set_body("Hello, World!").done();
      }));

  return 0;
}

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

Возможности:

  • Асинхронная обработка запросов. В случаях, когда данные для ответа на запрос не могут быть получены сразу (или почти сразу), то можно сохранить хэндл запроса для дальнейшей обработки (например, в другом контексте исполнения) и вернуться к этому запросу, когда все данные будут готовы.
  • HTTP pipelining. Хорошо работает в связке с асинхронной обработкой запросов.
  • Контроль за таймаутами. RESTinio может помочь в обработке “плохих” соединений, например из которых приходит «GET /», а затем они просто висят.
  • Построители ответов. Например, если нужно тело chunked-encoding, то в RESTinio есть и такой билдер.
  • Express-like маршрутизатор. Нужно создать нетривиальное REST API со множеством маршрутов, в которых к тому же заключены параметры? Просто возьмите RESTinio с express-like маршрутизатором, который создан по мотивам известного js-фрэймворка.
  • Поддержка TLS (HTTPS).
  • Базовая поддержка websocket. При помощи restinio::websocket::basic::upgrade() можно начать websocket сессию используя соединение, в котором был получен исходный upgrade-запрос.
  • Может быть запущен на стороннем asio::io_context. RESTinio отделен от контекста исполнения, что, например, позволяет запустить 2 сервера используя один asio::io_context или встраивать RESTinio в существующее приложение построенное на ASIO и для этого не потребуется отдельный io_context.
  • Некоторые настройки для оптимизации. Можно задать дополнительные опции для акцептора и сокета. Если RESTinio работает на пуле, то можно задать чтобы соединения принимались параллельно и/или создание внутренних объектов для работы с соединением создавались отдельно, это позволит быстрее принимать новые соединения.

RESTinio для своей работы использует standalone версию ASIO, а также ряд других хорошо известных open-source библиотек (nodejs/http-parser и fmtlib), а также catch2 для тестов.

RESTinio-0.4 можно рассматривать как стабильную бета версию.

Репозиторий проекта: https://bitbucket.org/sobjectizerteam/restinio-0.4

Документация: https://stiffstream.com/en/docs/restinio/0.4

Взгляд со стороны, пожелания, предложения и конструктивная критика приветствуются!

 ,

kola
()

Arch + Openbox + Tint2

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

Всем привет, еще один скриншот Openbox.
Более наглядно в видео: youtube.com.

  • Слева запускается лаунчер: rofi, а разноцветные иконки Tint2.
  • Курсы криптовалют: Conky.

>>> Просмотр (1366x768, 135 Kb)

 , ,

stupid
()

Посоветуйте проц со встроенной графикой

Форум — Linux-hardware

Посоветуйте проц от amd со встроенной графикой, сопоставимый с i5-7500.

Если такое вообще есть в природе. Я пока совершенно не ориентируюсь в поколениях и линейках процов от amd т.к. пока сижу в рабстве сами знаете кого.

Если кто-то наглядно проведёт аналогию между i3 X - i7 X с линейками десктопных процессоров от amd это будет гораздо полезней чем частный случай.

Upd. Учитывая стоимость матерей, возможно имеет смысл сравнивать с i5-8400

 

pon4ik
()

Критические уязвимости в протоколе WPA2

Новости — Безопасность
Группа Безопасность

В протоколе WPA2 (Wi-Fi Protected Access) обнаружены уязвимости, позволяющие прослушивать трафик, передаваемый по беспроводной сети. Злоумышленнику не требуется авторизация, достаточно находиться в зоне устойчивого приёма сигнала.

  • CVE-2017-13077: Reinstallation of the pairwise encryption key (PTK-TK) in the 4-way handshake.
  • CVE-2017-13078: Reinstallation of the group key (GTK) in the 4-way handshake.
  • CVE-2017-13079: Reinstallation of the integrity group key (IGTK) in the 4-way handshake.
  • CVE-2017-13080: Reinstallation of the group key (GTK) in the group key handshake.
  • CVE-2017-13081: Reinstallation of the integrity group key (IGTK) in the group key handshake.
  • CVE-2017-13082: Accepting a retransmitted Fast BSS Transition (FT) Reassociation Request and reinstalling the pairwise encryption key (PTK-TK) while processing it.
  • CVE-2017-13084: Reinstallation of the STK key in the PeerKey handshake.
  • CVE-2017-13086: reinstallation of the Tunneled Direct-Link Setup (TDLS) PeerKey (TPK) key in the TDLS handshake.
  • CVE-2017-13087: reinstallation of the group key (GTK) when processing a Wireless Network Management (WNM) Sleep Mode Response frame.
  • CVE-2017-13088: reinstallation of the integrity group key (IGTK) when processing a Wireless Network Management (WNM) Sleep Mode Response frame.

Проблема усугубляется тем, что огромное число клиентских устройств, например, с устаревшими версиями iOS и Android (демонстрация атаки на Android) никогда не получат необходимые обновления. Данные, передаваемые такими устройствами будут защищены лишь в том случае, если на точке доступа работает ПО, не подверженное уязвимостям.

Некоторые производители (точно известно об Ubiquiti и Mikrotik) уже выпустили обновлённые прошивки. Уязвимости исправлены в LEDE, но обновлённые прошивки ещё не собраны (последнее обновление — 17.01.3 — вышло 3 октября).

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

 ,

anonymous
()

Разработка под андроид, с чего начать новичку

Форум — Development

Привет лор,

короче история такова.

Я 10+ лет программирую, но в разработке под девайсы я полный нуб. Хочу влезть в тему и решил начать с андроида. Писать хочу на kawa (это схема на jvm).

И вот тут я очень удивлен, что не нашел вменяемого мана, объясняющего вообще что такое android sdk, как устроено андроид-проложение и т.д. Все что я видел - это в духе «Запускаем eclipse, выбираем „android-проект“ и создаем класс».

А что без эклиспа совсем никак? Просто взять написать в емаксе код и собрать его из консоли?

Короче, основной вопрос - подскажите вменяемый ман с базовыми вещами про устройство андроид-приложения и sdk, и заодно как эмулировать на ПК.

зы. у меня убунту

 ,

allchemist
()

Ещё один скрин

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

Постепенно опять скатился к комфортному DE на основе Compiz и ржавых гвоздей.

Чё тут есть

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

>>> Просмотр (2560x1440, 418 Kb)

 , ,

zezic
()

NVIDIA Prime на не-Ubuntu

Форум — Linux-hardware

Эта инфа есть в Gentoo Wiki и Arch Wiki, но всё равно тема с завидной регулярностью поднимается на ЛОРе. Поэтому я решил написать об этом здесь. Красивой переключалки не будет: только правкой конфигов.

Практическая часть

Убедитесь что версия вашего ядра Linux ≥ 3.13, X-Server ≥ 1.13, xrandr ≥ 1.4, драйвера NVIDIA ≥ 319.xx. Версию ядра Linux, минимально необходимую для NVIDIA Prime, подняли в драйвере 364.xx: раньше была 3.9.

Создайте /etc/X11/xorg.conf со следующим содержимым:

Section "ServerLayout"
    Identifier "layout"
    Screen 0 "nvidia"
    Inactive "intel"
EndSection

Section "Device"
    Identifier "intel"
    Driver     "modesetting"
    Option     "AccelMethod" "none"
    BusID      "PCI:0:2:0"
EndSection

Section "Screen"
    Identifier "intel"
    Device "intel"
EndSection

Section "Device"
    Identifier "nvidia"
    Driver "nvidia"
    BusID  "1:0:0"
    Option "AllowEmptyInitialConfiguration"
EndSection

Section "Screen"
    Identifier "nvidia"
    Device     "nvidia"
    Option     "UseDisplayDevice" "none"
EndSection

Вместо PCI:1:0:0 и PCI:0:2:0 подставьте свои значения, узнав их с помощью lspci. Чаще всего, значения именно эти.

Добавьте в конфиг-файл своего графического менеджера входа в систему эти команды:

xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

GDM:

Файл /etc/X11/gdm/Init/Default, просто добавьте в конец, перед «exit 0»

KDM:

Файл /usr/share/config/kdm/Xsetup, просто добавьте в конец.

LightDM:

Создайте файл /etc/lightdm/display_setup.sh со следующим содержимым:

#!/bin/sh
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

Выполните chmod +x /etc/lightdm/display_setup.sh.
В файле /etc/lightdm/lightdm.conf найдите секцию [Seat:*], а в нём display-setup-script=. Добавьте/раскомментируйте эту строку, затем приведите к виду:

[Seat:*]
display-setup-script=/etc/lightdm/display_setup.sh

Остальные графические менеджеры входа в систему

https://wiki.gentoo.org/wiki/NVIDIA/Optimus#Display_manager_configuration,
https://wiki.archlinux.org/index.php/NVIDIA_Optimus#Display_Managers

Решение бага с обрезанным экраном в Minecraft

В Minecraft, при нажатии клавиши F11, включается полноэкранный режим. С приведённым мной конфигом, вы увидите прямоугольник 640x480, и чёрный экран на остальной площади. С другими полноэкранными играми такого бага нет.

Я нашёл решение проблемы, когда читал Xorg.0.log. Виртуальный экран стартует с разрешением 640x480, затем пробрасывается на Intel, затем меняет размер на реальный. Нужно сделать так, чтобы виртуальный экран создался сразу с нужным разрешением.

В xorg.conf в секцию «„Screen“, Identifier „nvidia“», добавьте это (поменяв моё разрешение на ваше):

    SubSection "Display"
        Virtual     1600 900
    EndSubSection

Теоретическая часть

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

Что почитать?

http://ru.download.nvidia.com/XFree86/Linux-x86_64/384.69/README/randr14.html
https://github.com/Bumblebee-Project/Bumblebee/wiki/History-of-the-project
https://devtalk.nvidia.com/default/topic/957814/linux/prime-and-prime-synchronization/post/4964506/#4964506 Важная информация
https://wiki.gentoo.org/wiki/NVIDIA/Optimus
https://wiki.archlinux.org/index.php/NVIDIA_Optimus

 , , ,

ZenitharChampion
()

tmux: выставить $TERM в screen или screen-256color основываясь на $TERM терминала

Форум — General

Добрый день! Решил освоить tmux. Сейчас решаю вопрос о том, чтобы выставить $TERM в screen или screen-256color в зависимости от $TERM того терминала, в котором запускается tmux.

Нашёл на ArchWiki такой фрагмент:

## set the default TERM
set -g default-terminal screen

## update the TERM variable of terminal emulator when creating a new session or attaching a existing session
set -g update-environment 'DISPLAY SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY TERM'
## determine if we should enable 256-colour support
if "[[ ${TERM} =~ 256color || ${TERM} == fbterm ]]" 'set -g default-terminal screen-256color'
Поместил его в ~/.tmux.conf, запускаю tmux в xfce4-terminal с $TERM==xterm-256color и в tmux получаю $TERM==screen

Подскажите, пожалуйста, что я делаю не так. Заранее спасибо.

 , ,

Norong
()

вариант thread pool

Форум — Development

добрый день,

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

Есть главный поток (назовем main) который читает сообщения(джобы) из входной очереди сообщений. Каждое такое сообщение содержит ID. Прочитанное сообщение надо далее передать определенному потоку (worker), который ждет сообщения только с этим ID (в воркерах используется fsm).

К примеру, может быть 1024 уникальных ID. И я создаю заранее 1024 потока. Как передавать сообщения отдельным потокам?

В голове крутится вариант, что каждый поток worker должен иметь доступ к своей очереди сообщений, в которую пишет main поток, на основе полученного ID сообщения из входной очереди. Или есть варианты получше и более стандарнтые?

заранее спасибо,

 , ,

elmir_k
()

Отвертка для ноутбука с Linux

Форум — Linux-hardware

Привет.

Посоветуйте 100% отличную отвертку для сборки ноутбуков. Что бы не срывалась, не срывала винты, удобная, магнитная. Бренд и модель, что бы просто было найти и заказать. Полагаюсь на ваш опыт. Задрал китайский хлам, который после одного ремонта весь сорван

(На ноутбуке от рождения стоял linux, поэтому не стесняюсь писать тут)

 , , ,

Deleted
()

Где взять словари

Форум — Security

Актуальные с самыми популярными среди постсовка паролями. Гугл выдаёт ссылки на помойки. Может где есть словари в нормальном виде? Нужен для проверки надёжности паролей. Честно.

 ,

crutch_master
()

write пишет write: No such device or address

Форум — Development

При попытке запустить так sudo ./run пишет ошибку write: No such device or address.

Вот код

#include <stdio.h>
#include <sys/socket.h>
#include <linux/if_packet.h>
#include <net/ethernet.h>
#include <arpa/inet.h>
#include <net/ethernet.h>
#include <netinet/if_ether.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

unsigned char ipsrc[4] = { 0xc0, 0xa8, 0x01, 0x05 };
unsigned char ipdst[4] = { 0xc0, 0xa8, 0x01, 0x02 };
unsigned char srchw[6] = { 0x74, 0x2f, 0x68, 0xa2, 0x87, 0xc6 };
unsigned char broadcast[6]= { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
unsigned char unknown[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

int main ( int argc, char *argv[] )
{
	int sock;

	if ( ( sock = socket ( AF_PACKET, SOCK_RAW, htons ( ETH_P_ALL ) ) ) == -1 ) // ETH_P_ARP
	{
		perror ( "socket" );
		exit ( EXIT_FAILURE );
	}

	int length = sizeof ( struct ether_header ) + sizeof ( struct ether_arp );

	char buffer[length+1]; // length == 42

	struct ether_header *eh = (struct ether_header *)&buffer[0];
	struct ether_arp *ea = (struct ether_arp *) ( sizeof ( struct ether_header ) + &buffer[0] );

	strncpy ( eh->ether_shost, srchw, ETH_ALEN );
	strncpy ( eh->ether_dhost, broadcast, ETH_ALEN );
	eh->ether_type = ETHERTYPE_ARP;

	ea->ea_hdr.ar_hrd = ARPHRD_ETHER;
	ea->ea_hdr.ar_pro = 0x800;
	ea->ea_hdr.ar_hln = 6;
	ea->ea_hdr.ar_pln = 4;
	ea->ea_hdr.ar_op = ARPOP_REQUEST;

	strncpy ( ea->arp_sha, srchw, ETH_ALEN );
	strncpy ( ea->arp_tha, unknown, ETH_ALEN );
	strncpy ( ea->arp_spa, ipsrc, 4 );
	strncpy ( ea->arp_tpa, ipdst, 4 );


	if ( write ( sock, buffer, length ) == -1 )
	{
		perror ( "write" );
	}
	close ( sock );
}

 , ,

u0atgKIRznY5
()