LINUX.ORG.RU

Сообщения Jullyfish

 

ncurses. Текущее положение курсора.

Решил поиграться с ncurses. Для начала решил написать программку, которая будет показывать текущее положение курсора мыши. И тут началось…

Для получения положения курсора настраивается мышь с помощью функции mousemask() с флагом REPORT_MOUSE_POSITION. Как оказалось, этого недостаточно. Поискал в интернетах, обнаружилось, что надо настроить терминал, чтобы он считывал положение мыши.

$ echo $TERM
xterm-256color

Выяснилось, что чтобы в xterm обнаружить движение, нужно передать следующую escape-последовательность "\033[?1003h\n".

Окей, программа работает, положение курсора указывается. Но после завершения программы, все движения мыши терминал выплёвывает в терминал. Чтобы отключить отслеживание курсора передаётся последовательность "\033[?1003l\n", добавил в конце программы. Всё супер. Но…

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

Также есть прекрасный сигнал SIGSTOP и на него никакой обработчик повесить нельзя. И всё, тупик. Если программу отправить в «фон», то у нас терминал весело плюётся данными о положении мыши.

Может кто подскажет как это грамотно сделать?

Код программы целиком:

#include <ncurses.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>

enum { key_escape = 27 };

/*
 * Escape sequences for xterm mouse position detection.
 * TODO: find a better solution:
 */
const char report_mouse_start[]	= "\033[?1003h\n";
const char report_mouse_end[]	= "\033[?1003l\n";

static void at_exit()
{
	write(1, report_mouse_end, sizeof(report_mouse_end)-1);
	endwin();
}
static void sigexit_handler()
{
	at_exit();
	_exit(0);
}
static void set_signals()
{
	signal(SIGTERM, sigexit_handler);
	signal(SIGINT, sigexit_handler);
	signal(SIGQUIT, sigexit_handler);
}

static void init_curses()
{
	initscr();
	cbreak();
	keypad(stdscr, 1);
	noecho();
	curs_set(0);
	mousemask(REPORT_MOUSE_POSITION, NULL);
}

static void procmouse()
{
	MEVENT event;
	int rc;

	rc = getmouse(&event);
	if (rc == OK) {
		mvprintw(0, 0, "X:Y %03d:%03d", event.x, event.y);
	}
}

int main()
{
	int key;

	set_signals();
	atexit(at_exit);
	/* Init xterm mouse report: */
	write(1, report_mouse_start, sizeof(report_mouse_start)-1);
	init_curses();

	for (;;) {
		key = getch();
		if (key == KEY_MOUSE)
			procmouse();
		else if (key == key_escape)
			break;
	}

	return 0;
}

 , ,

Jullyfish
()

OpenBSD. Настроить http reverse proxy.

Есть два стула сервера, назовём их vps и home. На обоих серверах стоит OpenBSD и работает родной httpd. vps – хост в интернете, home – нет. Также есть своё доменное имя my.domain.net.

Как настроить так, чтобы при открытии vps.my.domain.net открывался сайт с компьютера vps (это как раз легко и уже сделано), а при открытии home.my.domain.net открывался сайт с компьютера home?

 , , ,

Jullyfish
()

~/.ssh/config подключение к одному хосту из разных мест.

Дано:

  • Ноутбук, с которым я бываю на работе и «где-то ещё»;
  • Рабочий сервер, «белого» IP нет;
  • ssh-туннель через мой домашний компьютер.

Требуется:

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

Чуть подробнее с примерами:

Host work
	HostName my.home.net
	User user
	PubkeyAuthentication yes
	IdentityFile ~/.ssh/work
	Port 20000
	IdentitiesOnly yes

Host work_local
	HostName 192.168.1.200
	User user
	PubkeyAuthentication yes
	IdentityFile ~/.ssh/work
	IdentitiesOnly yes

Если я на работе, я подключаюсь так:

$ ssh work_local

Если я «где-то ещё»:

$ ssh work

Хочется, чтобы я мог в обоих случаях делать:

$ ssh work

Но если я на работе, то подключение по локальной сети (ssh user@192.168.1.200), а если «где-то ещё», то подключение через домашний компьютер (ssh -p20000 user@my.home.net).

 

Jullyfish
()

Галочка решённой темы в лентах форума

В трекере и в отдельных темах видно когда тема отмечена как решённая. В лентах форума («Полная лента форума», «Лента технического форума», «Лента форума без Talks») никаких обозначений, что тема отмечена как решённая (или я такой невнимательный. :^) )

Можете, добавить, пожалуйста?

 

Jullyfish
()

Кто-нибудь умеет качать с Baidu?

В интернетах искал, как-то уже никакой способ не работает, а нужен файл на 16 гб.

https://pan.baidu.com/s/1zjUCHEgXTgyNr0PuFcoZ2Q?pwd=62o9 

 , ,

Jullyfish
()

Примонтировать директорию в оффтопике

Знакомый сидит под оффтопиком. У меня на компьютере есть директория, к которой я хочу дать ему доступ по сети (сеть не локальная), чтобы он там мог редактировать файлы (а конкретно его личные статичные веб-странички). Как это лучше сделать?

P.s. знакомый в возрасте, с консолью не знаком, ssh не предлагать.

 , ,

Jullyfish
()

Монтирование образа без разделов? Как добавить разделы?

Есть одноплатник luckfox pico pro max. Для него есит SDK, который собирает linux. В дальнейшем можно собрать образ для sd-карты, отдельный скриптом. Я поковырял скрипт, он делает следующее:

dd if=env.img of=disk.img bs=1k seek=0
dd if=idblock.img of=disk.img bs=1k seek=32
dd if=uboot.img of=disk.img bs=1k seek=544
dd if=boot.img of=disk.img bs=1k seek=800
dd if=oem.img of=disk.img bs=1k seek=33568
dd if=userdata.img of=disk.img bs=1k seek=557856
dd if=rootfs.img of=disk.img bs=1k seek=820000

А затем можно disk.img залить на sd-карту:

dd if=disk.img of=/dev/sdX bs=1M

И оно будет работать.

Как в образ disk.img добавить таблицу разделов?

 , , ,

Jullyfish
()

CSI разъёмы на одноплатниках, как их различать?

На руках есть одноплатные компьютеры, на каждом есть CSI-разъём:

  • Orange Pi PC2
  • Raspberry Pi 3B+
  • ESP32-P4-ETH, Luckfox Pico Zero
  • Radxa Rock 5B
  • Китайские noname с RV1109/RV1126

У всех (по пунктам) физически CSI-разъёмы различаются. Бывает сильно (1 мм площадь контакта или 0.5), бывает совсем чуть-чуть (есть шляйфы 0.5, на одном 22 контакта, на другом 20 контактов, а маркировка одинаковая).

Как в этом зоопарке CSI-разъёмов ориентироваться?

 , , , ,

Jullyfish
()

Посоветуйте портативный hdmi-монитор для одноплатников

Нужен небольшой портативный дисплей, для работы с одноплатными компьютерами (raspberry pi 1 b+, raspberry pi 3 b+, orange pi 3b, orange pi pc2, в будущем может ещё какие будут).

Главное, чтобы он стабильно со всеми этими устройствами работал. Было бы неплохо, если бы он ещё был аккумуляторный и с тачскрином, но это не обязательно.

 ,

Jullyfish
()

Мерцает экран в tty режиме после запуска screen, когда посылается bell сигнал

В tty режиме, если запустить screen, то, как я понимаю, когда отправляется сигнал bell (например, когда tab’ом пытаешь дополнить, а дополнять нечего, или есть жать backspace, когда текст весь стёрт) экран мерцает белым. Проблема воспроизводится на разных дистрибутивах. Это можно как-то исправить?

 , ,

Jullyfish
()

OpenBSD. Сменить разрешение экрана. tty

Дано:

  • Orange Pi PC2, на которой стоит OpenBSD;
  • Монитор bigme b13.

Проблема, что монитор сделан немного криво: пластиковая рамка, которая держит матрицу, эту же матрицу частично закрывает. Получается по всему периметру у меня немного обрезается изображение.

Есть ли возможность как-то сменить разрешение экрана? Преимущественно сижу без иксов, поэтому интересуют настройка для tty-режима.

 , , , ,

Jullyfish
()

FreeBSD на основной машине.

Рассматриваю установку FreeBSD на основную машину. Ports and Packages Collection изучены, нужные все программы вроде как есть. Там даже бывают программы, которых нет в линуксовых репозиториях (например, CAMotics нет в Fedora, LibreWolf нет в Debian).

Вопросы:

  • Как у FreeBSD с драйверами?
  • Насколько юзерспейс не меняется от релиза к релизу? Тут постараюсь уточнить. Если взять ту же Slackware 15.0 (2022 г.) и к ней SlackBook (2005 г.), то в общем, SlackBook за 17 лет актуальность практически не потеряла. Система и юзерспейс по ней нормально получается настроить. Как-то в других дистрибутивах идёт какая-то жёсткая привязка к DE/WM и обычно приходится изучать их кишки, которые постоянно меняются. Как с этим во FreeBSD? Жирные DE/WM ставить не планирую;
  • Может есть ещё какие-то подводные камни, о которых мне стоит знать?

Железо основной машины:

Host: B360M H 
Resolution: 2560x1440
CPU: Intel i7-8700 (12) @ 4.600GHz 
GPU: NVIDIA GeForce GTX 1070
Memory: 10891MiB / 15916MiB

 ,

Jullyfish
()

Debian 13 xfce4. Запуск программ при авторизации.

Установил себе Debian 13 с xfce4. При запуске системы открывается интерфейс (как он называется?), чтобы залогиниться, а также позволяет выбрать оконный менеджер.

Хочу, чтобы при запуске после авторизации сразу запускались кое-какие программы и скрипты, но ~/.xinitrc не работает. Что тут вместо ~/.xinitrc?

 ,

Jullyfish
()

Slackware 15 на ASUS Vivobook 16x K3605Z. Кто-нибудь ставил?

На работе выдали ноут, накатил Slackware. Столкнулся внезапно с бОльшим рядом проблем, чем ожидал. В общем и целом, работает, кроме:

Аудио

aplay -l отвечает no soundcards found....

intel-media-driver с необходимыми зависимостями стоят.

Видео.

Видеодрайвер, судя по всему, работет не совсем тот. Не могу регулировать яркость экрана командой light. В списке light -L ничего связанного с экраном нет.

vainfo возвращает failed with unknown libva error,driver_name=(null).

И, увы, критичное, мне нужно работать с видеопотоком.

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

 , ,

Jullyfish
()

Slackware 15.0. Смена раскладки в tty.

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

 , ,

Jullyfish
()

Поделитесь linker-скриптом для STM32F411CE, пожалуйста.

Ссылка на mcu.

Для mcu серии STM32F1 можно раздобыть ld-скрипт из:

STM32CubeF1/Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc/linker/

Для mcu серии STM32F4 в директории gcc/ отсутствует поддиректория linker/.

Пытался курить ld документацию и datasheet на mcu, чтобы написать свой скрипт, но понял, что этого недостаточно.

 ,

Jullyfish
()

Сделать в dwm управление как в hyperland ML4W

Работал n-ое время за компьютером коллеги, у которого hyprland стоит. К управлению немного привык. Есть ли готовый конфиг, чтобы настроить управление в dwm как в hyprland? Там стоит какая-то ML4W версия.

Искал в интернете. Видел наоборот конфиги для hyprland, чтобы управлялся как dwm.

 ,

Jullyfish
()

Сделать публичный git-репозиторий, с доступом по ssh только для клонирования

Хочу сделать публичный git-репозиторий, чтобы любой мог сделать:

git clone ssh://user@domain/path/to/repo

И больше ничего.

Чтобы нельзя было сделать git push и ssh user@domain.

 ,

Jullyfish
()

Удалённый по ssh с последующим chroot для сторонних пользователей

По наследству достался проект, который требует ubuntu-bionic. Через chroot работаю на персональном компьютере, иногда удалённо через ssh. Всё замечательно.

И вот хочется дать возможность удалённо подключаться коллеге.

Но чтобы сделать chroot нужен root-доступ. Давать root-доступ постороннему человеку я не готов.

Как дать возможность удалённо подключаться коллеге, чтобы он мог работать в «chroot-клетке», но root-доступа не имел на моём компьютере?

 ,

Jullyfish
()

Получить файл с образа прошивки

Есть китайский образ прошивки update.img. Хочу на ней проверить наличие кое-каких бинарников. Как мне это сделать?

Мои попытки:

fdisk никакой ценной информации не даёт:

$ fdisk -l update.img
Disk update.img: 128.84 MiB, 135102464 bytes, 263872 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

А вот cfdisk:

                         Disk: update.img
        Size: 128.84 MiB, 135102464 bytes, 263872 sectors
                            Label: sun

    Device       Start    End Sectors   Size Id Type         Flags
>>  update.img1      0 160649  160650  78.4M 83 Linux native      
    update.img2 160650 257039   96390  47.1M 82 Linux swap	u
    update.img3      0 257039  257040 125.5M  5 Whole disk
    Free space  258048 263871    5824   2.8M

Делаю:

# mount -t sysfs update.img mnt/
$ ls mnt
block  bus  class  dev  devices  firmware  fs  hypervisor  kernel  module  power

Содержимое директории, судя по всему, это /sys, но что с этим дальше делать – не знаю.

Также взял как некий нормальный образец образ для orange pi orange_upd.img с официального. С ним, в общем, всё примерно также, единственно, fdisk даёт нормальный выхлоп:

$ fdisk -l orange_upd.img 
Disk orange_upd.img: 6.7 GiB, 7189037056 bytes, 14041088 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: EFD5B137-007F-B448-BAD1-0EDE7C40EAA0

Device            Start      End  Sectors  Size Type
orange_upd.img1   61440  2158591  2097152    1G Linux extended boot
orange_upd.img2 2158592 14041054 11882463  5.7G Linux filesystem

 

Jullyfish
()

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