LINUX.ORG.RU

Сообщения LinuxUser

 

Wine dxvk чёрный экран при запуске игр с DirectX 11

Форум — Games

Всем привет!

При запуске через wine игр, которые требуют DirectX 11, отображается чёрный экран. Пробовал Carto и Tohu.

Буду благодарен за любые идеи куда копать, чтобы победить эту проблему.

Дистрибутив: Debian 10.8 (buster)
Видеокарта: GeForce GTX 950 (проприетарный драйвер 460.39 из репозитория)
Wine: wine-6.3 (Staging)
DXVK: 1.8.1

Если запускать с DXVK_HUD=1 – в левом верхнем углу чёрного экрана отображается информация о видеокарте, версии Vulkan и FPS.

В nvidia-settings отключал Allow Flipping, как советовали вот тут, но эффекта это не возымело.

 ,

LinuxUser ()

Сообщение «Maybe the USB cable is bad» в dmesg

Форум — General

После подключения USB-хаба встроенного в монитор в dmesg (а также в открытых консолях, которые на Ctrl+Alt+F*) примерно каждые 5-10 секунд появляется сообщение:

usb usb3-port4: Cannot enable. Maybe the USB cable is bad?

Но при этом клавиатура, мышь и веб-камера воткнутые в этот порт работают без каких-либо проблем.

Результаты гугления:

  • если USB-устройство глючит, то заменить кабель;
  • если всё работает предлагают игнорить это сообщение.

УМВР, но игнорить его не хочу.

Есть у кого идеи что можно сделать в такой ситуации? Хотелось бы как минимум замьютить это сообщение.

 ,

LinuxUser ()

Измерение входящего трафика в компьютер без внешнего IP

Форум — Admin

Есть два компьютера.
Один с внешним IP в сети интернет, второй – без.

Правильно ли я понимаю, что iperf сможет измерить только скорость исходящего трафика со стороны второго (без внешнего IP) в сторону первого (с внешним IP) и скорость входящего в первый из второго?

Если не правильно, то подскажите, пожалуйста, как измерить скорость входящего трафика в компьютер без внешнего IP?

 ,

LinuxUser ()

Drag and drop в DeaDBeeF не работает

Форум — Desktop

Поставил новый Debian 9. В качестве DE — Xfce.
Из официального debian-multimedia репозитория установил DeaDBeeF.
Попытался привычным движением мыши закинуть в него файлов из PCManFM — не работает! И из Thunar тоже!

Почему такое может быть?

Между PCManFM и Thunar файлы драгэнддропятся нормально.
В Debian 8 я юзал FVWM — там с Drag and drop-ом в DeaDBeeF всё впорядке было.

 , ,

LinuxUser ()

Посоветуйте видеорегистратор для видеонаблюдения

Форум — Linux-hardware

Хочу сделать систему видеонаблюдения в деревне.
«ТЗ»:

  • Камеры:
    • видео от 1280x720, от 20 кадров/с;
    • автоматическая ИК-подсветка ночью;
    • раб. температура от -30..+50°C, IP66—IP67;
    • расстояние до регистратора от 10 до 40м.
  • Регистратор должен уметь:
    • поддерживать запись с 8-ми камер;
    • записывать видео по движению на внутренний жёсткий диск;
    • подключаться к моей OpenVPN сети;
    • записывать видео в низком качестве на удаленный (мой) сервер по протоколу SFTP.
    • отдавать записанные видео по FTP или SFTP;
    • показывать видео с камер через веб-интерфейс.

На данный момент вижу два варианта:
1. IP-камеры, свитч с PoE и x86_64 компьютер. На компьютере – GNU/Linux, motion, OpenVPN, ssh-сервер.
2. Аналоговые AHD/MHD камеры, видеорегистратор с неогороженным Linux (с возможностью настроить на нём запись с помощью motion, поставить OpenVPN и ssh-сервер).

По первому варианту цены за камеру начинаются от 4000р., за свитч – от 5000р., комп с 1ТБ диском – примерно от 15000р. Итого, если 6 камер и UTP-кабеля на 2000р., то 46000р.

По второму варианту цена за камеру от 1250р.. Видеорегистратор - от 3500р. + 4000р. за 1 ТБ диск. Итого, если 6 камер и 5000р. на кабели и блоки питания для камер, то 20000р.

Получается второй вариант более чем в два раза дешевле. Только в Linux там, скорее всего, хрен залезешь.

Вопросы:
1. Посоветуйте видеорегистратор с неогороженным Linux.
2. Посоветуйте плату видеозахвата для компа с 4/8 портами с поддержкой AHD/MHD и Linux.
3. Ну и вообще любые конструктивные соображения приветствуются.

 

LinuxUser ()

Инициализация переменной размером бинарника

Форум — Development

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

Я сделал это так:
1. Собираю временный бинарник с переменной exe_size=1.
2. Его размер записываю в exe_size.
3. Собираю искомый бинарник с новым значением exe_size.

Выглядит это так:
main.c

#include <stdlib.h>
#include <stdio.h>

extern size_t exe_size;

int main(int argc, char *argv[argc+1]) {
	printf("this file size is %zu\n", exe_size);
	return EXIT_SUCCESS;
}
Makefile
default: tmp main

tmp:
	@mkdir tmp

main: tmp/main.o tmp/exe_size_fill_.o
	gcc $^ -o $@
	@if [ `stat -c %s $@` -ne `stat -c %s tmp/main` ]; then\
		echo 'error: wrong exe_size'; rm $@; exit 1; fi

tmp/main.o: main.c
	gcc $< -c -o $@

tmp/exe_size_fill_.o: tmp/exe_size_fill_.c
	gcc $< -c -o $@

tmp/exe_size_fill_.c: tmp/main
	echo '#include <stdlib.h>' > $@
	echo "size_t exe_size = `stat -c %s $<`;" >> $@

tmp/main: tmp/main.o tmp/exe_size_blank.o
	gcc $^ -o $@

tmp/exe_size_blank.o: tmp/exe_size_blank.c
	gcc $< -c -o $@

tmp/exe_size_blank.c:
	echo '#include <stdlib.h>' > $@
	echo 'size_t exe_size = 1;' >> $@

clean:
	rm -rf main tmp

Запускаем make, затем ./main.
Программа выдаёт что-то типа: this file size is 7399.

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

 ,

LinuxUser ()

Отображение картинки с прозрачностью как OSD

Форум — Desktop

Ищу программу для отображения картинки на экране по типу OSD, с поддержкой прозрачности через композитный менеджер.
Требуется чтобы картинку можно было отображать в реальном её размере с указанием места на экране, а не в виде маленькой иконки как это делают всякие notification-daemon-ы.

Нашёл заброшенный проект ghosd, который похоже делает то, что мне нужно (см. последний скриншот), но ссылка на исходники там уже не работает.

В идеале хотелось бы чтоб программа была в репозитории Debian-а.
Ну а в крайнем случае, сойдёт и библиотека к которой можно бы обратиться из C, C++ или Python.

 

LinuxUser ()

Не стартует lirc как сервис (Debian 8 Jessie)

Форум — General

Использую устройство Asus Digital Home. Скопировал его конфиг:

# cp /usr/share/lirc/remotes/asus/lircd.conf.asusdh /etc/lirc/lircd.conf
Сконфигурировал /etc/lirc/hardware.conf:
$ grep '^[^#]' /etc/lirc/hardware.conf
LIRCD_ARGS=""
DRIVER="asusdh"
DEVICE="/dev/usb/hiddev0"
MODULES=""
LIRCD_CONF="/etc/lirc/lircd.conf"
LIRCMD_CONF=""
Если запускаю так:
# lircd --nodaemon --driver=asusdh --device=/dev/usb/hiddev0 /etc/lirc/lircd.conf
То всё работает. В другом окне запускаю irw, нажимаю на пульте кнопки и irw их печатает.
Если запускаю как сервис:
# /etc/init.d/lirc start
Пишет: [ ok ] Starting lirc (via systemctl): lirc.service..
При этом lircd в списке процессов не появляется, лог файла /var/log/lircd нет и в /var/log/syslog ничего нового.
Пытался дебажить скрипт запуска сервиса: bash -x /etc/init.d/lirc start.
Обнаружил что всё заканчивается на /bin/systemctl start lirc.service.
При этом # locate lirc.service ничего не находит.

В какой лог файл смотреть чтоб понять почему этот systemctl так в итоге не запускает lircd?
Когда отсутствует lirc.service это нормально? Может дело в этом? Если да, то почему systemctl не руается?

 ,

LinuxUser ()

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

Форум — Development

Вот такой код

	char *s = "change me :)";
	s[0] = 'k';
вызывает ошибку сегментации.

Внимание, вопрос: что в чёрном ящике
Есть ли способ узнать на какой «тип» памяти указывает переменная?
Ну, то есть, можно ли её менять или нет.

 

LinuxUser ()

Потеря цвета при 1-пиксельных контрастных переходах

Форум — Development

В википедии пишут что VP8 (на котором основан WebP), поддерживает только формат 8-bit YUV 4:2:0, из-за чего в пиксельной графике могут быть потери цвета при 1-пиксельных контрастных переходах.

Вопрос знающим - это возможно даже при кодировании без потери качества или это устаревшая информация ещё с того времени когда WebP не умел кодировать без потери?

 

LinuxUser ()

Зачем нужны GTK_DIALOG(obj), GTK_WINDOW(obj) и т.п.?

Форум — Development

Требовалось сделать аналог виндовой функции MessageBox исключительно для вывода сообщений об ошибках.
Решил динамически грузить GTK-ашную либу и минимальным количеством её функций выводить требуемое.
Вот что получилось:

#include <stdlib.h>
#include <stdio.h>
#ifdef __unix__
	#include <dlfcn.h>
#endif /* __unix__ */

void error_msg_box(const char *msg);

int main() {
	error_msg_box("Test ok.");
	return EXIT_SUCCESS;
}

void error_msg_box(const char *msg) {
	if (msg == NULL)
		msg = "Unknown error.";

#ifdef _WIN32
	int __stdcall MessageBoxA
		(void *wnd, const char *text, const char *caption, unsigned int type);
	#define MB_ICONERROR 0x10
	MessageBoxA(NULL, msg, "Error", MB_ICONERROR);
#else

#ifdef __unix__
	void *lib_gtk = dlopen("libgtk-x11-2.0.so", RTLD_LAZY);
	if (lib_gtk == NULL)
		goto fb;

	typedef void (*GTK_INIT)(int *argc, char ***argv);
	typedef void *(*GTK_MESSAGE_DIALOG_NEW)(void *parent, int flags, int type, int buttons, const char *format, ...);
	typedef void (*GTK_WINDOW_SET_TITLE)(void *window, const char *title);
	typedef void (*GTK_WINDOW_SET_POSITION)(void *window, int position);
	typedef void (*GTK_WINDOW_SET_KEEP_ABOVE)(void *window, int setting);
	typedef int (*GTK_DIALOG_RUN)(void *dialog);
	typedef void (*GTK_WIDGET_DESTROY)(void *widget);

	GTK_INIT gtk_init;
	GTK_MESSAGE_DIALOG_NEW gtk_message_dialog_new;
	GTK_WINDOW_SET_TITLE gtk_window_set_title;
	GTK_WINDOW_SET_POSITION gtk_window_set_position;
	GTK_WINDOW_SET_KEEP_ABOVE gtk_window_set_keep_above;
	GTK_DIALOG_RUN gtk_dialog_run;
	GTK_WIDGET_DESTROY gtk_widget_destroy;

	#define GTK_MESSAGE_ERROR 3
	#define GTK_BUTTONS_CLOSE 2
	#define GTK_WIN_POS_CENTER 1

	if (
		!(gtk_init = dlsym(lib_gtk, "gtk_init")) ||
		!(gtk_message_dialog_new = dlsym(lib_gtk, "gtk_message_dialog_new")) ||
		!(gtk_window_set_title = dlsym(lib_gtk, "gtk_window_set_title")) ||
		!(gtk_window_set_position = dlsym(lib_gtk, "gtk_window_set_position")) ||
		!(gtk_window_set_keep_above = dlsym(lib_gtk, "gtk_window_set_keep_above")) ||
		!(gtk_dialog_run = dlsym(lib_gtk, "gtk_dialog_run")) ||
		!(gtk_widget_destroy = dlsym(lib_gtk, "gtk_widget_destroy"))
	)
		goto fb;

	gtk_init(NULL, NULL);
	void *dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", msg);
	gtk_window_set_title(dialog, "Error");
	gtk_window_set_position(dialog, GTK_WIN_POS_CENTER);
	gtk_window_set_keep_above(dialog, 1);
	gtk_dialog_run(dialog);
	gtk_widget_destroy(dialog);

	if (dlclose(lib_gtk))
		fputs("Warning: Failed to close GTK library.\n", stderr);

	return;
#endif /* __unix__ */

fb: fprintf(stderr, "Error: %s\n", msg);

#endif /* _WIN32 */
}
Компилируется так: gcc main.c -ldl -o main
(Под винду так: i686-w64-mingw32-gcc main.c -o main.exe)

Внимание вопрос: зачем в GTK нужны макросы GTK_DIALOG(obj), GTK_WINDOW(obj) и т.п. если всё вроде как работает и без них?

В документации в эти макросы предлагают оборачивать объекты (виджеты) при передаче в функции, например так:

gtk_dialog_run(GTK_DIALOG(dialog));

 ,

LinuxUser ()

Как узнать что сертификат правильно подписан?

Форум — Admin

Некоторое время назад поднял OpenVPN-сервер по инструкции http://openvpn.net/howto.html
(Используя набор скриптов easy-rsa)
Сгенерировал сертификаты для нескольких клиентов:

. vars
./build-key clientN
Настроил клиентов. Они успешно соединяются и всё у них работает.

Но, сегодня понадобилось добавить ещё одного клиента.
Добавляю также как и раньше.
Копирую на клиентскую машину – не работает, в лог пишет:

AUTH: Received AUTH_FAILED control message

Сравнил старые clientN.crt с новым, у всех есть одинаковые строчки:

X509v3 Authority Key Identifier: 
    keyid:F7:CF:8D:4F:4C:1D:2F:E3:DF:9F:8E:30:DE:87:77:D0:C4:45:7D:FB
    DirName:/C=RU/ST=MO/L=VNIISSOK/O=Home/CN=myserver/name=My Name/emailAddress=user@example.com
    serial:CB:4C:CC:83:9F:EE:BA:A9

Как узнать на сервере - правильно ли подписаны сертификаты?

 

LinuxUser ()

Как сделать, чтоб попытка exclusive flock не давала делать shared flock

Форум — Development

Несколько процессов могут читать из файла одновременно. Достаточно редко происходит запись в файл, при этом другие процессы из него читать не должны (ну и писать тоже).

Пытаюсь организовать блокировку с помощью flock. И вот какая штука получается: когда стоит shared lock, начинаем делать exclusive lock, соответственно происходит ожидание пока shared lock пропадёт. Но засада в том, что в это время другой процесс может сделать свой shared lock, и его тоже придётся ждать.

Как бы сделать так чтоб когда начали делать exclusive lock другие процессы ждали прежде чем получить shared lock?

Вот код для наглядности:

#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/file.h>
#include <sys/stat.h>
#include <sys/types.h>

int open_lockme() {
  int fd = open("lockme.tmp", O_CREAT);
  if (fd == -1) {
    perror("failed to open \"lockme.tmp\"");
    exit(EXIT_FAILURE);
  }
  return fd;
}

main() {
  if (fork() == 0) {
    if (fork() == 0) {
      int fd = open_lockme(); puts("(1): trying to set shared lock");
      flock(fd, LOCK_SH);     puts("(1): shared lock set");
      sleep(3);
      close(fd);              puts("(1): fd closed, shared lock removed");
    }
    else {
      int fd = open_lockme();
      sleep(2);           puts("(2): trying to set shared lock");
      flock(fd, LOCK_SH); puts("(2): shared lock set");
      sleep(2);
      close(fd);          puts("(2): fd closed, shared lock removed");
    }
  }
  else {
    int fd = open_lockme();
    sleep(1);           puts("(3): trying to set exclusive lock");
    flock(fd, LOCK_EX); puts("(3): exclusive lock set");
    sleep(2);
    close(fd);          puts("(3): fd closed, exclusive lock removed");
  }
  return EXIT_SUCCESS;
}
Хочется чтоб (2) ждал (3), а не наоборот.

 

LinuxUser ()

Тетрис для двоих игроков

Форум — Games

Ищу тетрис для двоих игроков. Примерно как на сайте http://www.tetrisfriends.com.
Так как там флеш, а он, как известно, не нужен, вот скриншот.

Хочется играть вдвоём с помощью джойстиков на одном или двух компьютерах.
Подойдут тетрисы для игровых консолей PlayStation/Sega и т.п. если их можно запустить через эмулятор в GNU/Linux.
На худой конец подойдут также тетрисоподобные игры, но чтоб они были качественные и на двоих игроков.

 ,

LinuxUser ()

find и буквы с диакритическими знаками

Форум — Desktop

Как оказалось при использовании диакритических знаков поиск find-ом не работает:

touch уда́рение
find -iname '*удар*'
Кто какое решение может предложить?

 ,

LinuxUser ()

Сразу два уровня нумерации в списке (1.1, 1.2, 1.3, 2.1, 2.2, …)

Форум — Desktop

Нужно чтоб список нумеровался вот так:

1.1
1.2
1.3
2.1
2.2
2.3
2.4
3.1
и т.д. Если делать просто «Up One Level», то список получается таким:
1.1
1.2
1.3
2
2.1
2.2
2.3
2.4
3
3.1
То есть чтоб список начинался с 1.1, а не с 1, сделать можно, а вот как сделать чтоб было 2.1 без 2 – никак придумать не могу. Помогите, пожалуйста.

 ,

LinuxUser ()

Есть ли душ в капсульном отеле?

Форум — Talks

В телевизоре говорят что Сноуден уже 19 дней живёт в капульном отеле аэропорта Шереметьево. Кто-нибудь знает, а там есть где душ принять? А то ж через 19 дней без душа от человека будет сильно вонять.

Судя по фотографиям в самой капсуле помыться нельзя. Может там есть платные душевые кабинки? Кто вкурсе?

Линукс тут при том что Сноуден вроде как хакер и наверняка шарит в ГНУ/Линуксе.

Кстати сейчас Сноуден встречается с правозащитниками. Даже фотка есть.

 ,

LinuxUser ()

Как отличить аппаратный рейд от «фейк-рейда»?

Форум — Linux-hardware

http://www.altlinux.org/FAQ/RAID
A3: не путайте аппаратный RAID с дешёвыми набортными контроллерами (особенно IDE/SATA), обычно скромно называемыми HostRAID: это фактически сумма недостатков software и hardware RAID, поскольку on-disk format вендорский, а ресурсы занимает ваши.

Как узнать какой у меня рейд?

Материнская плата вот эта http://www.supermicro.com/products/motherboard/Xeon/C216/X9SAE-V.cfm
В мануале к ней написано

SATA Connections
SATA 3.0 (6Gb/s) | Two (2) SATA 0~1
                 | RAID 0, 1
SATA 2.0 (3Gb/s) | Four (4) I-SATA 2~5
                 | RAID 0, 1, 5, 10 (MS Windows®)
                 | RAID 0, 1, 10 (Linux)
В BIOS можно выбрать «SATA Mode Selection» между «IDE Mode», «AHCI Mode» и «RAID Mode».
Утилита настройки RAID выглядит так http://i.imgur.com/3lTNiXR.jpg

 

LinuxUser ()

Командование notification-daemon`ом через dbus-send

Форум — Desktop

Делаю по спецификации: http://www.galago-project.org/specs/notification/0.9/x408.html#command-notify
Если слать

dbus-send --print-reply --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.Notify string: uint32:0 string: string:summary string:body array:string: dict:string:byte:urgency,1 int32:1000
Выдаёт
Error org.freedesktop.DBus.Error.InvalidArgs: Type of message, `(susssasa{sy}i)', does not match expected type `(susssasa{sv}i)'
Если слать
dbus-send --print-reply --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.Notify string: uint32:0 string: string:summary string:body array:string: dict:string:variant:urgency,byte:1 int32:1000
Выдаёт
dbus-send: Unknown type «variant»

Баг в dbus-send?

 ,

LinuxUser ()

XF86Display срабатывает с задержкой

Форум — Desktop

Ноут Lenovo ThinkPad T510i.
Дистрибутив Debian Wheezy.
Оконный менеджер Fvwm.

Запускаю xev. Нажимаю Fn+F7.
Секунды через 3–4 xev сообщает что была нажата XF86Display.
И всё это время изображение на экране не обновляется.

Кроме этого все эти 3–4 секунды процесс kworker загружает процессор на 100%.

Такое впечатление что кто-то пытается XF86Display обработать, хотя я не просил.

В Debian Lenny и Squeeze такого не было.

Что делать?

 

LinuxUser ()

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