LINUX.ORG.RU

Сообщения CL

 

зависимость хоста от родителя в nagios

Подскажите почему nagios при проверке доступности уделенного хоста не проверяет состояние родителя.
Есть удаленный сервер доступ к которому осуществляется через маршрутизатор.
# маршрутизатор
define host{
use generic-switch; cтандартный шаблон из примеров
host_name my_router
alias Router for internet
address 192.168.1.252; <-заведомо неправильный IP
}
# сервер в интернете
define host{
use linux-server; cтандартный шаблон из примеров
host_name remote_server
alias Internet remote server
address yandex.ru
parents my_router; вроде этого достаточно, связать два объекта
}

На в Веб интерфейсе нагиоса отрисовывается все правильно, my_router -> remote_server
Но если я указываю неправильно адрес маршрутизатора, а на хосте с nagios есть доступ к интернету, то у my_router State=Down, а ping к remote_server всеравно бегает и у remote_server State=Up.

PS nagios последней версии ставил из исходников

CL
()

обработчик SIGTERM в программе собраной под cygwin

Есть две программы: одна написанна с использованием Qt4, вторая на std с++.
Программа на Qt запускает вторую программу используя QProcess, когда надобность во второй программе отпадает, она ее останавливает методом из QProcess terminate(), во второй программе реализован обработчик сигнала SIGTERM.
Все это здорово работает под Linux. Но случилось страшное, заказчик захотел все это под windows.
Программу на std с++ собрал под cygwin-ом, на Qt собрал Qt SDK для windows. Все более менее работает, но с посылкой SIGTERM проблема.
Из Qt документации следует, что в windows метод terminate() вместо SIGTERM посылает WM_CLOSE message.
Собственно вопрос можно ли программе собраной под cygwin-ом перехватить и обработать сигнал завершения?

 

CL
()

debian+ViewSonic+touchScreen

Не могу настроить в дебиане touchScreen (монитор ViewSonic VX2258wm).
Ядро его определяет:
max@gmv:~$ lsusb
Bus 004 Device 002: ID 0408:3001 Quanta Computer, Inc. Optical Touch Screen
собрал и установил драйвер
xf86-input-hidtouch-10.05.23
прописал правило:
max@gmv:~$ cat /etc/udev/rules.d/71-touchscreen.rules
SUBSYSTEM==«usb», ATTRS{idVendor}==«0408», ATTRS{idProduct}==«3001», SYMLINK+=«usb/quanta_touch»
SUBSYSTEM==«input», KERNEL==«event*», ATTRS{idVendor}==«0408», ATTRS{idProduct}==«3001», SYMLINK+=«input/quanta_touch»

max@gmv:/opt/dump$ ls -l /dev/usb/
crw------- 1 root root 180, 0 Апр 12 17:09 hiddev0
lrwxrwxrwx 1 root root 7 Апр 12 17:09 quanta_touch -> hiddev0
прописал в xorg.conf
(по моему в xorg.conf бесполезно что либо писать, т.к конфиг из него уже не считывается)
Section «InputDevice»
Identifier «Optical Touch Screen»
Driver «hidtouch»
Option «SendCoreEvents» «true»
Option «ReportingMode» «Raw»
Option «Device» «/dev/usb/quanta_touch»
Option «PacketCount» «13»
Option «OpcodePressure» «852034»
Option «OpcodeX» «65584»
Option «OpcodeY» «65585»
Option «CalibrationModel» «1»
Option «CornerTopLeftX» «0»
Option «CornerTopLeftY» «0»
Option «CornerTopRightX» «1600» # 1920 for 23"
Option «CornerTopRightY» «0»
Option «CornerBottomLeftX» «0»
Option «CornerBottomLeftY» «900» # 1080 for 23"
Option «CornerBottomRightX» «1600» # 1920 for 23"
Option «CornerBottomRightY» «900» # 1080 for 23"
Option «CornerScreenWidth» «1600» # 1920 for 23"
Option «CornerScreenHeight» «900» # 1080 for 23"
EndSection
Не работает, подскажите что еще нужно.

CL
()

парсер для BNF в программе на с++

подскажите существует ли универсальный парсер для BNF (формы Бэкуса-Наура)
в принципе реализовать можно и самому (чем я сейчас и занимаюсь) , но велосипеды строить не хочется.

существуют правила для принимаемых сообщений
NNZ_BB_MESSAGE :=
”TITLE BB”
+ 0{points}+ msgtyp+ ldate+ 0{comment} + (extpoints) + mazid + (aldt) + [oldreqtxt | reqtxt]

само принимаемое сообщение может выглядеть так
-TITLE BB
-MSGTYP GG1 -MAZID BB18G6 -LDATE 9710010200
-BEGIN POINTS
-POZ X3456
-POZ X12C15
-END POINTS
-EXTPOINTS –NUM 017
-REQTXT
ЛЮБОЙ ТЕКСТ
КОТОРЫЙ МОЖЕТ
ВКЛЮЧАТЬ В СЕБЯ И СИМВОЛЫ СЛУЖАЩИЕ ДЛЯ РАЗДЕЛЕНИЯ ПОЛЕЙ

возможно ли получить разобранную структуру (в програме на с++) для дальнейшего анализа?

CL
()

serial_2usb

При работе с устройством типа serial_2usb (/dev/ttyUSB0)
вызов функции для определения состояния линии
ioctl(iDevId,TIOCSERGETLSR,&ret) завершается ошибкой Invalid argument
Когда работаю с обычным ком портом (/dev/ttyS*) все нормально.

CL
()

виртуальный ком порт

Здравствуйте, есть проблемка связанная с переползанием моей организации с виндовса на линукс (debian).
Есть железяка которая управляется виндовой программой.
Она нормально запускается под вайном, но для свей работы использует ком порты, точнее виртуальные через tcp ком порты.
Ранее для проброса портов использовалось ПО Lantronix CPR Manager, которое поставлялся вместе с железякой.
Чем (и как) в дебиане можно создать виртуальный ком порт который будет работать через сетевую плату по tcp/ip?

CL
()

сравнение wchar_t символов

пишу кодировщик для мтк2/мтк5
для однобайтовой кодировки (koi8-r) все довольно просто
unsigned codir_char_toMtk5(const char &x)
{
switch(x)
{
case 'A':return(SI_2BYTE|65); case 'B':return(SI_2BYTE|66); case 'C':return(SI_2BYTE|67);
case 'D':return(SI_2BYTE|68); case 'E':return(SI_2BYTE|69); case 'F':return(SI_2BYTE|70);
...
case 'Д':return(SO_2BYTE|100); case 'Е':return(SO_2BYTE|101); case 'Ф':return(SO_2BYTE|102);
case 'Г':return(SO_2BYTE|103); case 'Х':return(SO_2BYTE|104); case 'И':return(SO_2BYTE|105);
...
}
}
и обратно
char decodir_fromMtk5(const char &x,const char &reg)
{
switch(reg)
{
case(REG_MTK5_LAT): switch(x)//при REG_MTK5_LAT (латынь)
{
case 65:return 'A'; case 66:return 'B'; case 67:return 'C';
...
}
case(REG_MTK5_RUS): switch(x)//при REG_MTK5_RUS (кирилица)
{
case 64:return 'ю'; case 65:return 'а'; case 66:return 'б';
case 67:return 'ц'; case 68:return 'д'; case 69:return 'е';
...
}
}
а вот как сделать для utf8?
wchar_t в switch не засунешь, да и
wchar_t x;
if(x=='б')return 66;
не прокатывает.
Подскажите пожалуйста как сравнивать wchar_t?

CL
()

Вентилятор на корпусе слишком сильно гудит

Купил новый копмпьтер. Работаю в Debian. Вентилятор на корпусе слишком сильно гудит. По началу не обрашал внимания, думал так и должно быть "типа мошная система охлаждения". Но как-то пришлось поставить винду и вот чудо при загрузке винды вентилятор перестает шуметь. Т.е несколько секунд в процессе загрузки шумит, а потом перестает. Я так понимаю винда сама управляет работой вентиляторов. В дебиане такого не происходит шумит постоянно, теперь это сильно напрягает. Подскажите в какую сторону смотреть чтобы заставить дебиан нормально управлять работой вентилятора.

CL
()

pptp accepting packet

Не подскажите в чем проблема.
Для связи с провайдером по VPN использую pptp.
Запускаю pppd call MyProv defaultroute replacedefaultroute.
Все работает, но в сислог постоянно (20-30 штук в секунду) выдаются сообщения типа:
Apr 15 23:02:20 localhost pptp[2954]: anon log[decaps_gre:pptp_gre.c:395]: accepting packet 43031.
Подскажите пожалуйста из-за чего это происходит и как лечить.
Debian lenny, pptp version 1.7.2. настройки pptp
cat /etc/ppp/options.pptp
lock
noauth
refuse-pap
refuse-eap
refuse-mschap
refuse-mschap-v2
nobsdcomp
nodeflate
asyncmap 0
crtscts
modem
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

CL
()

mount ext3 + koi8-r

Недавно перешел на kubuntu 8.10 с asplinux11. В аспешнике по умолчанию была кодировка KOI8-R. Остался ext3 раздел в котором куча файлов с русскими названиями. Как его монтировать чтобы название файла нормально читать, а не угадывать по квадратикам? Я так понимаю что iocharset=koi8-r подходит только для vfat разделов. у меня пишет:
EXT3-fs: Unrecognized mount option "iocharset=koi8-r" or missing value
строчка в fstab:
/dev/sda5 /mnt/sda5 ext3 auto,rw,nosuid,nodev,iocharset=koi8-r,user 0 0

CL
()

завершение печати

Как узнать когда принтер закончит печатать?
Определяю состояние принтера и вывожу в него текст примерно вот так:
#include <stdio.h>
#include <sys/io.h>
#include <string.h>
#include <fcntl.h>
#include <stdlib.h>

#define LP0_DATA 0x378
/*
бит 3 соответсвует сигналу ERROR
бит 4 - сигналу РЕ
бит 7 - сигналу BUSY
*/
#define BIT_LPT_ERR 0x08
#define BIT_LPT_PE 0x20
#define BIT_LPT_BUSY 0x80

int printer_status(int st)
{
printf("статус принтера = 0x%X\n",st);
if((st&BIT_LPT_ERR)==0)/*ошибка*/
{
if((st&BIT_LPT_PE)!=0)
printf("\tнет бумаги\n");
else printf("\tошибка\n");
}
/*если нет ошибки и есть бит PE*/
else if((st&BIT_LPT_PE)!=0)
printf("\tвыключен\n");
else if((st&BIT_LPT_BUSY)==0)/*занят*/
printf("\tзанят\n");
else
{
printf("\tготов к работе\n");
return 0;
}
return -1;
}

int main(void)
{
const char *text;
int st,iDevId;

text="print test text\n";
iDevId=open("/dev/lp0",O_WRONLY);
if(iDevId==-1)exit(-1);
if(ioperm(LP0_DATA,2,1)==-1)exit(-1);
usleep(100000);
st=inb(LP0_DATA+1);
ioperm(LP0_DATA,2,0);
if(printer_status(st)==0)
write(iDevId,text,strlen(text));
return 0;
}
нужно еще отслеживать (хотя бы примерно) когда весь записанный в буффер принтера текст будет распечатан.
PS по ТЗ будет использоваться только принтер Epson LX 300+.

CL
()

перспективы при возможной смене работы

Работаю на одной и той же работе (г. Москва) уже 7 лет, причем более 5 лет пишу для ОС МСВС. Вот решил поинтересоваться своими перспективами при возможной смене работы.
Хорошо умею писать на языке СИ на котором разрабатывал клиент-серверные приложения, собственную (узко специализированную) СУБД, приложения работающие с различными устройствами ввода/вывода, используя библиотеку GTK (1.2.x) делал графические интерфейсы. Единственное никогда не занимался ядром, просто мне никогда таких задач не ставилось.
Неплохо знаком с С++, но из разработок на этом языке есть только программы (по работе и для собственных нужд) использующие библиотеку QT.
Были прецеденты когда приходилось искать ошибки в чужом коде, а также приходилось дорабатывать чужой код.
Сейчас ради развлечения/изучения пишу программку на С++ использующую в качестве БД MySQL.
Вот в принципе и все. Наверное стоит добавить, что неплохо (на уровне юзера) ориентируюсь в Linux.
Реально ли сейчас с такими навыками найти в Москве работу с з/п около 2700$? или сейчас в основном требуются программисты пишущие на языках более высокого уровня?

CL
()

задать размер бумаги QPrinter или gs

в программе (на QT 3.3.x) нужно создать postscript файл для его последующего вывода на принтер т.е непосредственно печатать будет совсем другая программа.
Использую класс QPrinter. Все работает просто замечательно, если бы не одна проблема.
Размер бумаги А3, но в принтер она должна вставляться не 297 x 420 а 420 x 297
т.е ее ширина больше чем длина, кто знает что такое принтер типа EPSON LX-1170 меня поймет.
setOrientation(QPrinter::Landscape);
не помогает, вернее он работает если бумага вставляется как 297 x 420.
Я думаю нужно указывать setOrientation(QPrinter::Portrait);
и как-то менять размер бумаги.
Пробовал покопать в сторону setPageSize(QPrinter::Custom); но что дальше с этим делать в доках не описанно.
PS может проблему можно решить не в формировании ps файла, а в его дальнейшей конвертации в epson команды.
Здесь я использую
gs -sDEVICE=epson -sOutputFile=tmp.epson -sPAPERSIZE=a3 -dNOPAUSE -dBATCH file.ps

CL
()

не хочу постоянно переключать раскладку клавиатуры

Вот такая проблема появилась, может как-то лечиться?
Раскладка клавиатуры по умолчанию стоит us. Если нужно вводить текст на русском то для каждого окна (в одной и той же программе) каждый раз приходиться переключать раскладку, т.е она почему то не сохраняется.

CL
()

автоматический вход без логина и пароля

Как сделать чтобы при загрузке линукса от юзера не требовалось вводить логин и пароль?
Т.е чтобы какой либо пользователь (желательно на root) автоматически регистрировался в системе и под ним поднимались иксы.

CL
()

QTextEdit+append()

На экран (в QTextEdit) посимвольно выводится большой поток информации.
Подскажите как сделать чтобы QTextEdit не сильно тормозил.
При получении новой информации я делаю
TextEdit->setText(TextEdit->text() + newData) это дело очень тормозит.
Есть вариант TextEdit->append(newData) это для моих задач подходит но
при append() новый текст начинается с новой строки. Можно ли сделать чтобы при TextEdit->append(newData) новая строка не добавлялась.
версия QT 3.4.x

CL
()

функция с переменным числом параметров

Есть функция с переменным числом параметров, может ли она передавать эти параметры другой функции с переменным числом параметров. т.е. например я хочу сделать следующее void syslog_printf(int priority,const char *format,...) { syslog(priority,format,ПОЛУЧЕННЫЕ ПАРАМЕТРЫ); printf(format,ПОЛУЧЕННЫЕ ПАРАМЕТРЫ); } Возможно ли так сделать, если да то как? Спасибо.

CL
()

QT какая кнопка нажата

QT 3.x Можно ли определить в обработчике нажатия кнопки какая кнопка нажата? Есть куча кнопок писать под каждую обработчик нажатия кнопки не реально, хочется сделать один обработчик, а в нем, взависимости от того какая кнопка нажата, чтото выполнять.

CL
()

PostScript-->Ghostscript-->EPSON

Кто использовал Ghostscript у себя в программе (на СИ) поделитесь опытом пожалуйста. Мне нужно конвертировать массив данных в формате PostScript в массив данных в формате языка принтера EPSON для дальнейшей распечатки. Может данную задачу можно без Ghostscript решить подскажите.
Спасибо.

CL
()

вывод на принтер в массива формате postscript

подскажите как перевести массив данных в формате postscript в язык притера.
От клиетна приходит массив данных (в формате postscript) и мне его нужно вывести на принтер, причем делать это собираюсь работая непосредственно с портом принтера т.к нужно отслеживать возможные ошибки при печати (кончилась бумага, выключили принтер и т.д) плюс очень важно отследить момент завершения печати. Я знаю что распечатывать можно через cups указывая ему файл на диске который нужно распечатать, но в таком случае нельзя узнать о возникающих ошибках при печати.
Как определять состояние принера я вроде накопал, а вот как перевести postscript в язык притера не знаю.

CL
()

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