LINUX.ORG.RU

Сообщения utf8nowhere

 

Пропаганда фошизма в нике

Форум — Linux-org-ru

 ,

utf8nowhere ()

Когда графику наконец перенесут в ядро?

Форум — Desktop

Где ей самое место.

Я ведь правильно понимаю, что сейчас при перемещении мыши происходит следующее:

  • Ядро ловит прерывание, пишет читающим из /dev/input/... инфу о перемещении мыши и пробуждает ждущих данных с соответствующего дескриптора (Xorg-сервер). Это первое переключение контекста.

  • Xorg, прочитав о перемещении мыши, дёргает drmModeMoveCursor чтобы переместить изображение курсора на экране. drmModeMoveCursor — это переключение контекста обратно в ядро.

  • Далее, Xorg-сервер посылает клиентам событие о перемещении мыши, записывая в сокет — опять переключение в ядро.

  • Клиенты читают из сокета — опять переключения контекста.

В общем, куча переключений контекста, поэтому графика заметно тормозит, что порождает темы вроде Windows работает плавнее и четче

Почему многие плюются от микроядер, говорят, что FUSE — это игрушка и реальные ФС должны быть в ядре, но при этом к идее всунуть графический сервер/композитор в ядро относятся отрицательно?

 , ,

utf8nowhere ()

Почему линукс синхронизирует состояние NumLock LED между клавиатурами, но не синхронизирует CapsLock LED?

Форум — General

Кстати, несмотря на синхронизацию NumLock LED между клавиатурами, на второй клавиатуре при горящем NumLock LED, эффекта как при включённом numlock, не наблюдается

 , , ,

utf8nowhere ()

Ctrl+<Key> работает, Alt+<Key> работает, Ctrl+Alt+<Key> работает в одном случае из 20

Форум — Linux-hardware

(Почти) перестали восприниматься клавиатурные комбинации типа Ctrl+Alt+T, Ctrl+Shift+T, Ctrl+Alt+стрелки и т.п. При этом Ctrl+T, Sifht+T, Alt+T работают.

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

Вот как реагирует xev на нажатие Ctrl:

KeyPress event, serial 38, synthetic NO, window 0x5e00001,
    root 0x1ca, subw 0x0, time 8059683, (1333,757), root:(1334,819),
    state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 38, synthetic NO, window 0x5e00001,
    root 0x1ca, subw 0x0, time 8059774, (1333,757), root:(1334,819),
    state 0x4, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Alt:

KeyPress event, serial 38, synthetic NO, window 0x5e00001,
    root 0x1ca, subw 0x0, time 8135282, (765,666), root:(766,728),
    state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 38, synthetic NO, window 0x5e00001,
    root 0x1ca, subw 0x0, time 8135323, (765,666), root:(766,728),
    state 0x8, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

и Ctrl+Alt:

KeyPress event, serial 38, synthetic NO, window 0x5e00001,
    root 0x1ca, subw 0x0, time 8184123, (967,625), root:(968,687),
    state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 38, synthetic NO, window 0x5e00001,
    root 0x1ca, subw 0x0, time 8184733, (967,625), root:(968,687),
    state 0x4, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 38, synthetic NO, window 0x5e00001,
    root 0x1ca, subw 0x0, time 8184736, (967,625), root:(968,687),
    state 0xc, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 38, synthetic NO, window 0x5e00001,
    root 0x1ca, subw 0x0, time 8184837, (967,625), root:(968,687),
    state 0x8, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 38, synthetic NO, window 0x5e00001,
    root 0x1ca, subw 0x0, time 8184840, (967,625), root:(968,687),
    state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 38, synthetic NO, window 0x5e00001,
    root 0x1ca, subw 0x0, time 8185149, (967,625), root:(968,687),
    state 0x4, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Правый Ctrl ведёт себя нормально.

Свопнул левые Ctrl и Win. Так всё ОК.

 , ,

utf8nowhere ()

Торвальдс плохой программист?

Форум — Talks

Как известно, Торвальдс утверждал (не дословно!):

Bad programmers worry about the code. Good programmers worry about data structures and their relationships.

А ещё:

Talk is cheap. Show me the code.

Получается, он плохой программист? Почему он требует показать code, а не data structures?

Решение: Торвальдс плохой программист? (комментарий)

 

utf8nowhere ()

Раскладки в GNOME 3: кто в лес, кто по дрова

Форум — Desktop

В Settings/Region & Language/Input Sources указаны 2 раскладки, в ibus-setup/Input Method только один.

Это нормально?

 , ,

utf8nowhere ()

Кто там корутины хотел?

Форум — Development

 

utf8nowhere ()

О размере стандарта C++

Форум — Development

Часто приходится слышать критику типа «ко-ко-ко, C++ сложный язык, стандарт распух более чем на полторы тыщи страниц, это нивазможна выучить!!!11».

Как известно, стандарт условно делится на Core («сам язык C++») и Library-части (стандартная библиотека). Это не на 100% строгое разделение, «сам язык» знает кое-что о стандартной библиотеке (std::size_t, std::ptrdiff_t, std::initializer_list и т.д.), поэтому я говорю «условно делится».

Стандарт начинается с Core-части, после идёт описание библиотеки. Вот табличка страниц, с которых начинается Library-часть («Library introduction») в разных версиях стандарта:

  • C++98 — стр. 311
  • C++03 — стр. 317
  • С++11 — стр. 424
  • C++14 — стр. 414
  • C++17 — стр. 445

итого, за почти 20 лет «сам» C++ распух чуть более чем на 100 страниц, на треть от C++98.

Всё остальное распухание с 776 до 1618 страниц приходится на стандартную библиотеку.

В чём сложность осилить 100 страниц за 20 лет? Ладно, там не только добавляли, но и меняли уже имеющееся. Страниц на 200-250 новшеств может набралось.

Или кто-то всерьёз под изучением языка понимает зубрёжку списка функций и их аргументов из его стандартной библиотеки?

 , ,

utf8nowhere ()

В C++20 представление знаковых будет только в two's complement

Форум — Development

Странно, что никто не запостил новость. Ещё 24 ноября смёржили соответствующие изменения в текущий драфт стандарта.

Нет, signed overflow defined не сделали.

 , ,

utf8nowhere ()

Какую универсальность добавила systemd

Форум — Admin

если наличие/поведение юнитов всё так же зависит от опакечивателей?

Дисклеймер: этот тред не против systemd, а против маркетоидного бреда вместо перечисления реальных преимуществ/недостатков.

В общем, есть docker. В Debian/Ubuntu он ставится вместе с docker.socket-юнитом, так что даже при не запущенном докере он будет автоматически запущен при обращении к его сокету.

В centos никакого docker.socket нет, docker.service нужно стартовать руками.

Ну и как тут systemd помог условному админу чувствовать себя одинаково в любом дистрибутиве?

 ,

utf8nowhere ()

В C++20 появятся виртуальные функции!

Форум — Development

Несколько часов назад в драфт стандарта были смёржены коммиты, определяющие термин «виртуальная функция». До сих пор такого определения не было.

 

utf8nowhere ()

clang перенимает наклонности оффтопика

Форум — Development

Помнится, в Windows были (есть) селективные хаки, чтобы отдельные багнутые приложения, неправильно использующие WinAPI, могли работать. Например, SimСity.

Держу в курсе, что в clang тоже такое есть.

https://github.com/llvm-mirror/clang/blob/f4426c04a24f3f37369101f3a92898dd2e2...

// HACK: We've got an exception-specification
//   noexcept(noexcept(swap(...)))
// or
//   noexcept(noexcept(swap(...)) && noexcept(swap(...)))
// on a 'swap' member function. This is a libstdc++ bug; the lookup
// for 'swap' will only find the function we're currently declaring,
// whereas it expects to find a non-member swap through ADL. Turn off
// delayed parsing to give it a chance to find what it expects.

 ,

utf8nowhere ()

Как работает графический дисплейный менеджер для X?

Форум — General

Проще оказалось проверить самому. Да, по X-серверу на пользователя.

Я так понимаю, он сам работает в иксах.

Что происходит при логине/переключении пользователя? Стартует другой X-сервер, которому отдаётся контроль над VT? Каждому пользователю запускается по X-серверу?

 , ,

utf8nowhere ()

В C++20 могут появиться макросы, как в Rust

Форум — Development

...если комитет примет предложение представленное в этом пропозале.

Предлагается добавить «нативные» C++-макросы.

Из пропозала

So what would one of these native C++ macro functions look like?

 // Macro functions look just like a free function except for the # at the
 // end of the function name. Note that the # counts as part of the identifier,
 // so return# does not collide with the return keyword.
 template<class T>
 inline int return#(T v)
 {
	 if(v > 0)
		return -> v; // control flow keyword + ’->’ means it affects the
	 // calling function, not this macro function
	 if(v < 0)
		break ->;
	 // Also this break is executed in the calling function
	 // If break isn’t valid at the point of use
	 // in the calling function, it will not compile
	 // We can inject variable declarations into the calling function
	 // with typename + ’->’. This is useful for RAII triggered cleanup
	 // i.e. these get destructed when the scope of the call point exits.
	 // Note that the actual name of the variable injected will
	 // be some very unique identifier which cannot collide with any
	 // other variable, including those injected by other macro functions
	 int -> a = 5;
	 // Otherwise this function macro has a local scope, and code
	 // executed here remains here
	 size_t n = 0;
	 for(; n < 5; n++)
	 {
		 // We can also refer to variables previously injected into the
		 // caller’s scope by this macro function like this.
		 // This lets one keep state across invocations of the macro function
		 (-> a) ++;
	 }
	 // This returns a value from this function macro to the caller
	 // If you wrote return -> a, that would be a compile error
	 // as there is no variable called a in this scope.
	 return (-> a);
}

Такие макросы могут быть полезны для реализации некоторых фич, требующих вставки кучи служебного кода, например, корутин или оператора try, без внесения модификаций в Core Language, чисто на уровне библиотек.

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

 , ,

utf8nowhere ()

TCP SYN/ACK/RST-туннель

Форум — General

Пробовал ICMP-туннелирование для обхода учёта трафика — не прокатило.

Другой метод, который может быть использован для тех же целей — это передача данных в payload TCP SYN/ACK-пакетов. Не нашёл только готовых реализаций такого туннеля. Может кто знает?

(хотя если учитывается любой payload IP-пакетов, то учёт трафика не обойти никак).

 , ,

utf8nowhere ()

Выгрузить nouveau и восстановить текстовый VGA-режим

Форум — General

С драйвером nouveau GPU лочится при перезагрузке и вешает ядро.

Можно передать параметр ядру nouveau.modeset=0, но тогда nouveau вообще не загрузится и иксы будут работать с VESA-драйвером.

Можно поставить проприетарные драйвера, с ними таких проблем нет. Но я хотел бы остаться на nouveau и по-прежнему мочь перезагружать систему.

Попробовал делать как описано в https://nouveau.freedesktop.org/wiki/KernelModeSetting/, а именно:

echo 0 > /sys/class/vtconsole/vtcon1/bind
rmmod nouveau

Драйвер, конечно, выгружается и при этом изображение с монитора пропадает (вообще пропадает сигнал с кабеля и монитор засыпает). Хотелось бы вернуться в текстовый VGA-режим. На echo 1 > /sys/class/vtconsole/vtcon0/bind — 0 реакции. Монитор не видит сигнала на кабеле.

Пробовал делать как описано в https://www.kernel.org/doc/Documentation/fb/fbcon.txt, а именно сохранить состояние VGA (vbetool vbestate save) и восстановить его:

vbetool vbestate restore < <vga state file> 
echo 0 > /sys/class/vtconsole/vtcon1/bind
rmmod nouveau

После выполнения первой команды режим меняется, но, похоже, не на текстовый VGA, т.к. я вижу какой-то мусор из пикселей в верхней части экрана и всё. rmmod nouveau вообще уходит в D-state.

 ,

utf8nowhere ()

systemd mask unit in a container

Форум — Admin

Как сделать так, чтобы определённый юнит не запускался в контейнере? (в systemd-nspawn, например)

Возможно ли сделать так, чтобы в контейнере был активен другой таргет? (multiuser вместо graphical)

 ,

utf8nowhere ()

Read-only root on NFS

Форум — Admin

Попробовал обеспечить загрузку системы с read-only /, смонтированному по NFS.

Исходные данные:

  • Ubuntu 18.04 Mate, установлена в виртуалку, rootfs перенесен с виртуального диска на NFS-сервер
  • Изменён конфиг initramfs для загрузки с NFS, изменён fstab, initramfs и ядро закинуты в каталог tfpt-сервера

Система типа грузится по NFS, но ожидаемо обламывается куча юнитов (Failed to start Create Volatile Files and Directories, Failed to start Load/Save Random Seed, Failed to start Network Time Synchronization и т.д.), т.к. им нужен / в rw. Логин не работает, даже автологин.

Нашёл такую штуку, как overlayroot: https://spin.atomicobject.com/2015/03/10/protecting-ubuntu-root-filesystem/ Монтирует / как overlayfs с нижним ro-слоем и верхним rw. Я использовал описанный по ссылке вариант с rw-слоем в tmpfs.

Поставил, настроил. Судя по логам загрузки, скрипты overlayroot отрабатывают на стадии initramfs. Но дальше лог загрузки тот же: те же юниты не стартуют, залогиниться не получается. Есть подозрение, что systemd обнуляет все усилия скриптов overlayroot по созданию rw-корня с помощью overlayfs перемонтируя / (Starting Remount Root and Kernel File Systems...)

Какие идеи?

 , , , ,

utf8nowhere ()

Is it intentional что Клаб можно смотреть через Комментарии пользователей?

Форум — Linux-org-ru

Если ты не залогинен, то получаешь 403 при попытке доступа к Клабу. Однако, через профиль любого пользователя видно, что он писал в Клаб.

 

utf8nowhere ()

Оптимизатор НАКАЗАЛ разработчика Clang за UB в коде

Форум — Talks

Изложение https://qinsb.blogspot.ru/2018/03/ub-will-delete-your-null-checks.html

Однажды один человек закоммитил один коммит в clang и компилятор перестал проходить один из тестов. После тщательного анализа выяснилось, что в коде была возможна ситуация UB, но оптимизатор её проигнорировал и соптимизировал код так, как будто эта ситуация невозможна.

Вот код, который моделирует поведение кода из коммита (Код покоцан движком блога, вырезаны аргументы шаблонов. Я не буду пытаться их восстановить, т.к. аргумент-тип у llvm::SmallVector может быть понят из контекста, где надо, а аргумент-число — не особо важен):

struct Foo {
  llvm::SmallVector Vals;
};
struct Bar {
  Foo *getLastFoo() { return Foos.empty() ? nullptr : Foos.back(); }
  llvm::SmallVector Foos;
  void *Pad;
  void doUB();
};
void __attribute__((noinline)) Bar::doUB() {
  if (getLastFoo()->Vals.empty())
    puts("Vals empty");
  else
    puts("Vals non-empty");
}
int main() {
  Bar b;
  b.doUB();
}

В SmallVector::back стоит assert на не-пустоту вектора (!empty()). Т.к. код этих методов инлайнится (в getLastFoo) и компилятор видит, что проверка на пустоту в assert-е находится в false-ветке тернарного оператора, в условии которого та же самая проверка уже сделана, то в assert подставляется константа true и, в общем, можно считать, что assert выкинут.

Далее. Компилятор видит, что результат вызова getLastFoo в Bar::doUB() всегда разыменовывается, поэтому он не может быть нулевым указателем. Следовательно, условие тернарного оператора в getLastFoo не может быть истинным и при инлайнинге оператор безусловно заменяется на свою false-ветку (Foos.back() (в котором уже нет проверки на empty, т.к. assert был выкинут ранее)).

SmallVector устроен так, что в пустом векторе back() указывает внутрь самого SmallVector, и, короче говоря, код интерпретирует кусок памяти объекта Bar b как объект типа struct Foo и выполняет проверку Vals.empty() с непредсказуемым результатом.

Автор заканчивает тем, что радуется новому юз-кейсу для опции -fno-delete-null-checks, но по-прежнему не считает, что эту опцию стоит использовать для решения проблем ядра linux.

(видимо, имеется в виду типичный говнокод ядра

struct foo* p = bar->p;

if (!bar) {
...
}
который ядрописатели не считают багом, а винят в своих кривых руках компиляторы)

Перемещено tailgunner из development

 , ,

utf8nowhere ()

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