LINUX.ORG.RU

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

Правило для udev (подключение монитора)

 , ,

Приветствую!

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

В каталоге /etc/udev/rules.d я добавил файл 99-monitor-hotplug.rules со следующим содержимым:

 ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/home/viktor/scripts/monitor_plug.sh" 

Скрипт monitor_plug.sh содержит такой код:

#!/bin/bash

statusVGA="$(cat /sys/class/drm/card0-VGA-1/status)"
export XAUTHORITY=/home/viktor/.Xauthority
export DISPLAY=:0.0

if [ "${statusVGA}" = "connected" ]; then
        if [[ $(edid-decode /sys/class/drm/card0-VGA-1/edid | grep "Monitor name:" | sed 's/Monitor name: //') == "S22E200" ]]; then
                #/bin/sleep 2;
                xrandr --output LVDS-1-1 --off --output VGA-1-1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output HDMI-0 --off;
       fi
fi

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

ncrdg
()

autostart'ы в совремённом Linux

 ,

Что-то много развелось нынче разных мест, в которых могут быть прописаны или откуда какие-нибудь программы/скрипты могут стартовать автоматически. В этом отношении Linux сделался похож на винду.

Уже не уверен, что все их знаю. Решил составить список, может кто чего скажет ещё по его поводу. Поскольку ориентируюсь на Debian, не исключено есть какие-то особенности в иных дистрах.

  1. /etc/init.d  — (rc.0-6) — классическое место для init-скриптов для запуска разных демонов. + rc.local
  2. cron — /etc/crontab запуск чего-то по расписанию кроном и его клонами.
  3. /etc/systemd/system — сервисы, которые запускает systemd
  4. etc/xdg/autostart/ — приложения, запускаемые при загрузке десктопа, а вообще есть (но может и не быть, но автозагрузка иметься) системная переменная $XDG_CONFIG_DIRS
  5. /etc/profile, а также скрипты внутри /etc/profile.d — запускаются bash подобными оболочками.
  6. ~/.bashrc ~/.profile и ~/.bash_logout при разлогинивании
  7. /etc/X11/xinit/xinitrc — запускается X-ами, но если есть ~/.xinitrc запускается он.
  8. /etc/X11/xinit/xserverrc — тоже может запускаться
  9. /etc/gdm3/Xsession (gdm — для старых) если gdm3 менеджер, соответственно есть ещё: /usr/share/config/kdm/Xsession и другие
  10. Автозапуск графическими оболочками, кроме автостарта десктопа есть ещё, например, автозапуск гномом (и прочими), например для гнома и кде в /usr/share/applications и для текущего пользователя в ~/.config/autostart/ для кде ещё и в ~/.config/plasma-workspace/shutdown и ~/.config/plasma-workspace/env
  11. Вообще в графических оболочках может быть дохренища всяких автозапусков на разные случаи прописано в отдельных настройках, например, в гномореестре: скринсейверы, приложения при нажатии кнопки Power и т.д.
  12. Модули ядра. Загрузка прописывается в /etc/modules — сами модули лежат в подкаталогах /lib/modules/`uname -r`/ с расширением .ko
  13. Может быть раздел в (U)EFI — BIOS, оттуда что-то тоже может стартануть, причём даже после загрузки ядра, если правильно понял. Как фича работает пока толком не понял.
  14. /etc/udev/rules.d — менеджер устройств в Linux.
anonymous_incognito
()

Как исправить EDID?

 , ,

На ноутбуке установил убунту 12.04. После добавления самых важных для себя программ поставил пакет lm-sensors. Перезагрузил систему и увидел ошибку EDID checksum error remainder 174.

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

bagdanchik
()

Intel i915 и частота ШИМ подсветки

 , , , ,

Такая история. В моем ноутбуке установлена графическая карта от Intel. При уменьшении яркости очень заметна низкая частота ШИМ. Глаза болят. Нашел решение вот здесь: http://devbraindom.blogspot.com/2013/03/eliminate-led-screen-flicker-with-int.... При запуске системы устанавливается нужная частота и все чудесно. Но при переходе в спящий режим и выхода из него (это когда экран блокировки с вводом пароля появляется) частота ШИМ сбрасывается на дефолтные значения. Какие костыли или не костыли посоветуете? Заранее спасибо.

UPD: решение в первом комментарии.

Tuxman
()

Избавление от PWM-мерцания на железе intel. Нюансы

 , , ,

Всем привет Как известно, есть такая проблема как PWM-мерцания, связанная с реализацией функции изменения яркости.

На драйверах intel есть возможность это пофиксить с помощью intel_gpu_tools. А точнее, прописать в спец регистр значение периода мерцания (обратно пропорционально частоте). Туда же в нижние байты можно записать значение цикла внутри периода, который отвечает за яркость (цикл =0 - яркость 0%, цикл = период - яркость 100%)

Собственно, с этим все ок, это действительно работает. Подробнее есть здесь

Но есть большая проблема в том, что после этого изменения яркость практически не регулируется. Например, оригинальный период 937 (200Hz, шаг изменения яркости - 9). Я меняю период на 94 (2000Hz, шаг изменения яркости должен стать 1). Кол-во шагов для примера - 100 (то есть, в условных единицах - от 0 до 100 с шагом 1)

Таким образом, получается, что после изменения частоты, я дохожу до 100% яркости всего за 10 шагов (10%). То есть 0-10% еще есть какая-то регулировка, а 10-100% уже максимальная яркость.

Полагаю, что эту ситуацию можно исправить, изменив параметр /sys/class/backlight/intel_backlight/max_brightness. Он всегда остается равным периоду, который был задан изначально. Если можно было бы синхронизировать изменение регистра и этого параметра, то теоретически можно было бы сохранить регулировку яркости в полном диапазоне. Но этот параметр не получается изменить даже под рутом (permission denied) путем echo >

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

Спасибо

Upd: Думаю важно добавить, что это ноут

kao
()

Мерцание монитора

 , ,

Праздничного вечера всем, господа. Уже довольно давно раздражает, но всё как-то терпел, старался светлые темы выбирать и т.д., сейчас надоело, хочу решить проблему. Сама проблема: мерцает монитор при тёмных тонах на экране (как серая тема LOR'а, к примеру, или же #002b36 из тёмной Solarized-темы, но там вообще полная задница, очень чётко видно это мерцание, смотреть невозможно). Что характерно, на оффтопике такого не наблюдается, специально накатил и проверил. Что пробовал: пробовал сменить кабель HDMI - не помогло, пробовал сменить вход в мониторе на второй HDMI - не помогло, пробовал настраивать сам монитор - тоже не помогло, менял DE и WM - абсолютно никакой разницы. Единственное, что вроде бы частично спасло, это подключение через VGA, там этого дела вроде бы нет, или, хотя бы, поменьше, но сидеть с VGA - попахивает абсурдом. Моё железо и софт, собственно:

  • Void Linux x64, ядро неважно, всегда так было, даже на всяких мятах-манжарах
  • bspwm (тоже не слишком-то роль играет, в кедах была та же ботва, по-моему, даже хуже было, но это было давно, ручаться не буду)
  • Монитор ViewSonic VX2363SMHL
  • Intel i3 7100
  • Intel HD 630 в качестве графики, от которой идёт картинка.

Всем заранее спасибо.

john_snake
()

modeline parameters

 

Вопрос знатокам

Кто знает как узнать и перенести из под винды в иксы вот эту строчку. А конкретно Linux modeline parameters: «1360x768» .....

Купил ноут Dell Latitude 3470 Но настройки экрана по дефолту работают под линухом ужасно.

Глаза спустя 3-4 часа вытекают просто.

Это возможно?

gybkabob
()

Самый быстрый алгоритм / библиотека на распаковке

 , , , ,

Собственно интересует библиотека всякого сжатия без потерь типа zstd, всякие lz, можно и гугловские.

Скорость сжатия не важна, низкий размер архива и главное быстрая распаковка (возможно даже низкая нагрузка на проц).

Например тут https://github.com/facebook/zstd написано в бенчмарке что lz4 1.9.2 = 4530 MB/s на распаковке и ничего про нагрузку на проц, память.

Может кто находил сравнение по скоростям и с нагрузкой на систему?

P.S. Факт: Встроенная функция бекапа игры в Steam использует gzip с AVX ускорениями, не реально медленное и жрет все ресурсы процессора.

bhfq
()

Почему работает доступ к значению без $ в условном выражении?

 , ,

Сейчас наткнулся вот на такую особенность:

#!/bin/bash

regExpLen="1"

if [[ regExpLen -eq 1 ]]; then
  echo "Равно 1"
fi

Вопрос: почему в условии можно не писать $regExpLen, почему работает просто имя переменной?

Xintrea
()

Systemd как менеджер пользовательской сессии

 ,

Хочу организовать себе сабж. Для тех, кто не знает, команда /usr/lib/systemd/systemd --user запускает пользовательскую сессию systemd. Зачем это нужно? Более гибкая, более контролируемая и многоуровневая автозагрузка программ/демонов пользователя.

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

И да, cast plm

serkhay
()

much performance II

 ,

Всем привет! Спустя некоторое время выкладываю продолжение результатов «упорных» стараний над оптимизацией Gentoo на ПК с Intel Celeron Coppermine 900 MHz и 256 Mb RAM. Что сделал:

  • С помощью ноута собрал 17-ую версию;
  • Ядро теперь 4.14.8, а так же я поснимал еще больше звездочек в menuconfig (на старте без X и MariaDB - min 13 Mb RAM, c XFCE - min ~60 Mb RAM);
  • Нет теперь dm, запуск X происходит автоматически с помощью getty+autologin;
  • Браузер Palemoon SSE версия работает шустрее, страницы открывает почти как в 2018 году;
  • Все тот же gimp2 и теперь OpenOffice 4, который пришел на смену LO, так как LO заколебал своими багами;

Была попытка использовать вылизанную Plasma 5, но черепашьему HDD это не понравилось.

Некоторое время Gentoo даже обновлялась до первого прихода gcc. ПК использовался в качестве печатной машинки, для работы с таблицами, для того, чтобы поправить картинки в gimp, и в качестве сервера CUPS и базы данных MariaDB с последующем подключением через OO Base.

Вот еще два скриншота:

К сожалению, это последние скриншоты, ко мне наведался «ИТ отдел» с новым ПК, с установленным Windows 7, мой компьютер обещали форматнуть с аргументом !внезапно! «линукс нелицензионный, нельзя, точка», и скорее всего будет отправлен на свалку. Комп 04.01.2002 даты рождения, с ним я работал 2 года, был мной почищен от пыли и от XP ZverCD с заменой термопасты. По информации из BIOS с 45'С упало до 36. Оформляется stage4. Сегодня или завтра его последний день :(

И немного конфигов:

mfhunruh
()

Завещание мертвеца

 завещание

Шалом.

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

И, внезапно, подумал, а нет ли готового решения?

Интересует готовое решение с возможностью отправки e-mail'ов, SMS, поддержка транспортов во всякие WhatsApp приветствуется. Периодические запросы на проверку жив/здоров необходимы, мониторинг соцсетей приветствуется.

Кто-нибудь знает такое вот?

Заранее благодарю за ответ.

IPR
()

Либо я сейчас изобрел велосипед, либо создатели tmux колдуны, либо и то и то сразу

Всем привет! Как кто-то из вас, возможно, знает, я еще тот консолефаг, ну вот нравится мне интерфейс ncurses, нравится фреймбуффер, и не нравится оконный интерфейс и мышкотыканье. Но иногда бывает необходимо посмотреть ссылку на сайт с ядреными JS, бывает веб интерфейс у какой-нибудь программы,да много чего. Что же делать? Тянуться за ноутом? Ставить иксы? Проводить археологические раскопки,и собирать gtk2 под directfb? Нет! Как оказалось (по крайней мере,для меня это мозгоразрыающая новость, поменявшая мою жизнь на до и после), ЛЮБУЮ программу, использующую qt,можно запустить в голой консоли! Нужно запускать с -platorm linuxfb, и о чудо,оно работает! Проверил на браузере falkon, программах dolphin и qbittorrent, все работает. Но только в tmux,в обычной консоли у меня не получилось. Повторяю,возможно я сейчас открыл Америку,но для меня это шок

d09
()

kpartx + loop + lvm = не удаляются разделы loopXpY после отключения образа

 ,

Привет всем!!

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

Монтирую образ блочного устройства через kpartx -a <ИМЯ>.img, далее забиваю нулями этот образ через dd предварительно. Создаю два раздела, и в итоге имею в /dev вот такие устройства: /dev/loop0 /dev/loop0p1 /dev/loop0p2. На втором разделе (loop0p2) создаю LVM-том и 2 LVM-раздела на нем, форматирую их и сразу же демонтирую. После, чтобы отключить LVM-том даю команду vgchange -an <VG> и сразу же отключаю образ kpartx -d <ИМЯ>.img. При этом команда losetup дает мне понять что мое loop0-устройство успешно отключена, не выводя его в своем списке.

А самое интересное, что после отключения образа файлы /dev/loop0[pX] остаются в каталоге, а вместе с ними и LVM-том на них. Команда dmsetup ls никаких устройств связанных этим lVM не видит. Команда blkid продолжает упорно писать, что в /dev/loop0p2 располежен все тот же LVM-том VG.

Как я представляю, вместе с отключением образа должны пропасть и loop-устройства, но что-то происходит не так.

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

dmnord
()

Посоветуйте современную эмуляцию «классов» для С в эмбеды

 , ,

https://github.com/lvgl/lvgl/issues/1919

По ссылке я выписал основную литературу и библиотки. Там все толково, но не знаю насколько актуально.

Если кто в курсе, на чем нынче модно ООП для С изображать, дайте знать. Надо для эмбедов:

  • много оперативки жрать нельзя.
  • много флеша жрать не желательно.

По фичам критично только наследование методов/данных и virtual. Можно забить болт на private, эксепшены, множественое наследование и т.п.

Ответ типа «лучше ooc toolkit до сих пор ничего не придумали» - тоже устроит.

Vit
()

Тормозит запиcь в ком-порт

 ,

Всем привет

Имеется прибор на процессоре imx6UL Под него сборка дебиан от производителя.

В общем надо с этого прибора опрашивать другие по rs-485 на скорости 9600.

Порт открывается настраивается в неблокирующем режиме и т.д. и т.п. Чтение / запись работают через select с заданным таймаутом.

В итоге получается как-то так, что реальная скорость отправки данных существенно ниже установленной 9600.

Команда int bytes_write = write(fd, frame_write, frame_write_size) выполняется моментально. Но дальше получаем жуткий таймаут на получение данных. Проверили осциллографом, что данные на опрашиваемый прибор приходят и он отвечает сразу же без задержек.

Стал разбираться. Вставил после write команду tcdrain( fd ) И вот уже на ее выполнение (ожидание пока данные уйдут) отжирается в среднем 30 миллисекунд. В посылке 7 байт.

Ясно, что функцией write сначала скидывается в буфер, а потом запихивается в физическое устройство.

Но не 30 же миллисекунд на отсылку 56 бит?? По заявленной скорости на это должно уходить 5мс в идеале ).

Вопрос: можно ли как-то оптимизировать в линуксе всё это дело.

Под виндами написал такой же код, там всё просто летает. Отправка данных на 9600 на той же линии занимает в пределах 5-7 миллисекуд и примерно через столько же приходит ответ.

Что в линуксе не так?

demon051
()

Подключиться к unix-сокету через bash

 , , ,

Есть небольшой сервер, который принимает соединение по сокету и выводит переданное сообщение. Вот:


#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
    int sock, listener;
    struct sockaddr_in addr;
    char buf[1024];
    int bytes_read;

    listener = socket(AF_INET, SOCK_STREAM, 0);
    if(listener < 0)
    {
        perror("socket");
        exit(1);
    }
    
    addr.sin_family = AF_INET;
    addr.sin_port = htons(3210);
    addr.sin_addr.s_addr = htonl(INADDR_ANY);
    if(bind(listener, (struct sockaddr *)&addr, sizeof(addr)) < 0)
    {
        perror("bind");
        exit(2);
    }

    listen(listener, 1);
    
    while(1)
    {
        sock = accept(listener, NULL, NULL);
        if(sock < 0)
        {
            perror("accept");
            exit(3);
        }

        while(1)
        {
            bytes_read = recv(sock, buf, 1024, 0);
            if(bytes_read <= 0) break;
            printf(buf);
            send(sock, buf, bytes_read, 0);
        }
    
        close(sock);
    }
    
    return 0;
}

Сокет, вроде как, даже открывается:

State      Recv-Q Send-Q Local Address:Port          Peer Address:Port  Process 

LISTEN     0      1            0.0.0.0:3210               0.0.0.0:*             

Я сделал подобный скрипт, но видимо это совершенно не то, что нужно:

 exec 4</dev/tcp/0.0.0.0/3210
 echo -ne "Message" >&4

Как быть?

Hart
()

Не могу поморгать светодиодом на arduino mega2560

 ,

Код крайне примитивен:

#include <stdbool.h>
#include <avr/io.h>

int main(void)
{
    DDRB |= 1 << 7;

    while (true)
    {
        volatile long int i;
        for (i = 0; i < 50000; i++)
          ;
        PORTB |= 1 << 7;
        for (i = 0; i < 50000; i++)
          ;
        PORTB &= ~(1 << 7);
    }

    return 0;
}

Если собираю и заливаю из arduino ide, то все ок.

Если собираю avr-gcc и заливаю через usbasp, то не работает. Сам usbasp рабочий.

Собираю так:

avr-gcc -mmcu=atmega2560 -o test.elf test2.c
avr-objcopy -O binary test.elf test.bin
avrdude -c usbasp -p atmega2560 -U flash:w:test.bin

Я как-то в непонимании, что я делаю не так

UPD: заливка прошивки проходит нормально, но светодиод не мигает.

UPD2: fuses E:FD, H:D8, L:FF

cvs-255
()

Void с evilwm — легкая и удобная система

 ,

Система

Void Linux установлена и настроена на нетбуке 10.1″ с 2 GB RAM и микропроцессором Intel Atom.
Я люблю Void за его следование философии Unix. Он очень просто устроен. Здесь нечему ломаться, потому что ничего лишнего нет. Разработчики сделали очень быстрый пакетный менеджер. Также быстрым является и родная система инициализации Runit. Всё просто, удобно и работает очень быстро.

Как оказалось, evilwm предоставляет все необходимое для управления окнами. Большие навороты не нужны. Вместе с консольным tmux/screen, в котором ты сам с легкостью настраиваешь расположение окон (панелей) как захочешь, – это лучший выбор для пользователей, которые привыкли к классическому управлению окон. Нет никаких панелей, значков и прочего хлама.

evilwm потребляет всего 3.8 Мб RAM из всей потребляемой оперативной памяти (56 Мб), а его клавишные бинды легко запомнить (Ctrl + Alt). Создание собственных хоткеев не предусмотрено, но меня вполне устраивают текущие. Если кого-то не будут устраивать, может воспользоваться xbindkeys. Также имеется псевдотайлинговое поведение (Ctrl + Alt + {Y,U,B,N}, Ctrl + Alt + =, Ctrl + Alt + X). При желании можно легко отредактировать исходный код. Очень интересный WM, несмотря на то, что им мало кто пользуется.

Скриншот

ОС: любимый Void Linux.
WM: evilwm.
Музыкальный плеер: mpd (musicpd.org) + ncmpcpp.
Эмулятор терминала (консоли): rxvt.
Шрифты: Pragmata.

За кадром

Текстовый редактор: vim (vim.org) (+ vim-latex + vim-pandoc + nou.vim).
Табличный процессор: sc-im.
Файловый менеджер: nnn (github.com).
Видеоплеер: mplayer + youtube-viewer.
Почтовый клиент: mutt.
IRC-клиент: irssi
RSS-клиент: newsboat.

Deleted
()

Питание для планшета в автомобиле

 

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

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

Стандартное питание с ЮСБ не вариант. Потому как девайс уже есть и у него уже сильно умерла батарея. Новую батарею искать тоже не вариант. Потому как девайс уже сильно аут оф производство и даже продажи.

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

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

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

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

При чем тут линукс? Ну в общем будет там и линукс. Скорее всего. Еще в процессе попыток под него линукс собрать.

AfterWork
()