1Cv77+wine@etersoft+NXclient+буфер обмена (Не работает буфер с кирилицей)
Модераторы: dimbor, Модераторы разделов
-
caspervova
- Сообщения: 9
- ОС: linux ubuntu 10.04 i386
1Cv77+wine@etersoft+NXclient+буфер обмена
Здраствуйте. Может продублируюсь, но уже неделю по форуме лажу, но ничего не нашел по етому вопросу.
Есть проблема с буфером обмена (вставка кирилицы из Линукса через терминал в 1С). Вместо кирилицы вставляет кракозябры.
Кто сталкивался с етой проблемой помогите!!!
Подключается через SSH!!! 1-сервер, 28-клиентов.
На сервере стоит: Ubuntu 10.04,
freenx-server_0.7.4-eter22ubuntu_i386,
nx_3.4.0-eter7ubuntu_i386,
opennx_0.16-eter4.svn444ubuntu_i386,
wine-etersoft-network_1.0.12-eter4ubuntu_i386
У клиента: Ubuntu 10.04,
nxclient_3.4.0.7-eter1ubuntu_i386,
nx_3.4.0-eter7ubuntu_i386.
Есть проблема с буфером обмена (вставка кирилицы из Линукса через терминал в 1С). Вместо кирилицы вставляет кракозябры.
Кто сталкивался с етой проблемой помогите!!!
Подключается через SSH!!! 1-сервер, 28-клиентов.
На сервере стоит: Ubuntu 10.04,
freenx-server_0.7.4-eter22ubuntu_i386,
nx_3.4.0-eter7ubuntu_i386,
opennx_0.16-eter4.svn444ubuntu_i386,
wine-etersoft-network_1.0.12-eter4ubuntu_i386
У клиента: Ubuntu 10.04,
nxclient_3.4.0.7-eter1ubuntu_i386,
nx_3.4.0-eter7ubuntu_i386.
-
pelmen
- Сообщения: 1268
- ОС: debian
Re: 1Cv77+wine@etersoft+NXclient+буфер обмена
По-моему эта проблема имеет место даже в виндоусе.
-
caspervova
- Сообщения: 9
- ОС: linux ubuntu 10.04 i386
-
guliver
- Сообщения: 38
- ОС: debian
-
caspervova
- Сообщения: 9
- ОС: linux ubuntu 10.04 i386
-
dimbor
- Ведущий рубрики
- Сообщения: 1572
- Статус: Подвинутый участник
Re: 1Cv77+wine@etersoft+NXclient+буфер обмена
На семерке лечится.
Блин, это под виндой, сори. Под линем и опенэныксом надо патчить nxagent аналогично винде. Не патчил, т.к. не применяю.
Блин, это под виндой, сори. Под линем и опенэныксом надо патчить nxagent аналогично винде. Не патчил, т.к. не применяю.
-
caspervova
- Сообщения: 9
- ОС: linux ubuntu 10.04 i386
-
dimbor
- Ведущий рубрики
- Сообщения: 1572
- Статус: Подвинутый участник
Re: 1Cv77+wine@etersoft+NXclient+буфер обмена
caspervova писал(а): ↑17.06.2010 10:25как его пропатчить? может есть ссилка на *.deb уже пропатченого???
Теоретически, там надо решить три проблемы:
- найти код в nxagent, отвечающий за клипборду в клиентском режиме.
- заставить отдавать CLIPBOARD вместо PRIMARY (на 3.4 и новых вайнах может быть неактуально - чет они там с SetSelectionOwner намутили, что даже без этого работает)
- самое главное: везде изменить приоритет, чтобы кодировка селекшенсов отдавалась/получалась в UTF8_STRING, а XA_STRING задвинуть на последнее место, т.к под вайном она CP1251 частенько, линуксу не характерная.
Только после этого можно будет собирать свой deb и давать на него ссылку.
-
caspervova
- Сообщения: 9
- ОС: linux ubuntu 10.04 i386
Re: 1Cv77+wine@etersoft+NXclient+буфер обмена
dimbor писал(а): ↑18.06.2010 03:27caspervova писал(а): ↑17.06.2010 10:25как его пропатчить? может есть ссилка на *.deb уже пропатченого???
Теоретически, там надо решить три проблемы:
- найти код в nxagent, отвечающий за клипборду в клиентском режиме.
- заставить отдавать CLIPBOARD вместо PRIMARY (на 3.4 и новых вайнах может быть неактуально - чет они там с SetSelectionOwner намутили, что даже без этого работает)
- самое главное: везде изменить приоритет, чтобы кодировка селекшенсов отдавалась/получалась в UTF8_STRING, а XA_STRING задвинуть на последнее место, т.к под вайном она CP1251 частенько, линуксу не характерная.
Только после этого можно будет собирать свой deb и давать на него ссылку.
а можно по подробнее? где ети файлы искать? я еще не очень хорошо знаю NX...
-
dimbor
- Ведущий рубрики
- Сообщения: 1572
- Статус: Подвинутый участник
Re: 1Cv77+wine@etersoft+NXclient+буфер обмена
Более подробный алогоритм
:
Поставить сырцы пакета nx_3.4.0... и по ходу дела много всякой хрени во главе с gcc.
Добиться сборки клона - это уже первый шаг к победе.
Агент живет в nx-X11/progams/Xserver/hw/nxagent/*.c
Здесь есть тема "Курощение...". Там весь механизм работы клипборды обжеван. Отличие - клиент патчился все-же виндовый. Т.е., что русскому человеку хорошо, немцу - смерть (это я про 1251). Агент там тоже патчился, но в серверной ипостаси.
Поставить сырцы пакета nx_3.4.0... и по ходу дела много всякой хрени во главе с gcc.
Добиться сборки клона - это уже первый шаг к победе.
Агент живет в nx-X11/progams/Xserver/hw/nxagent/*.c
Здесь есть тема "Курощение...". Там весь механизм работы клипборды обжеван. Отличие - клиент патчился все-же виндовый. Т.е., что русскому человеку хорошо, немцу - смерть (это я про 1251). Агент там тоже патчился, но в серверной ипостаси.
-
caspervova
- Сообщения: 9
- ОС: linux ubuntu 10.04 i386
Re: 1Cv77+wine@etersoft+NXclient+буфер обмена
dimbor писал(а): ↑18.06.2010 16:01Более подробный алогоритм:
Поставить сырцы пакета nx_3.4.0... и по ходу дела много всякой хрени во главе с gcc.
Добиться сборки клона - это уже первый шаг к победе.
Агент живет в nx-X11/progams/Xserver/hw/nxagent/*.c
Здесь есть тема "Курощение...". Там весь механизм работы клипборды обжеван. Отличие - клиент патчился все-же виндовый. Т.е., что русскому человеку хорошо, немцу - смерть (это я про 1251). Агент там тоже патчился, но в серверной ипостаси.
Извините, но у меня нет такой папки... nx-X11/progams/Xserver/hw/nxagent/. Если можно как-то по подробней описать? Буду очень признателен. Просто я новичок в Линуксе, и знаком только с ДЕБ пакетами. С нуля собирать пакети неумею. Помогите новичку!!!
-
dimbor
- Ведущий рубрики
- Сообщения: 1572
- Статус: Подвинутый участник
Re: 1Cv77+wine@etersoft+NXclient+буфер обмена
Тематика раздела совсем не про это. Но если напрашиваетесь на послание в Гугель, то почему бы не послать.
-
Hoblin
- Модератор
- Сообщения: 1442
- Статус: Etersoft team
- ОС: ALT Linux
Re: 1Cv77+wine@etersoft+NXclient+буфер обмена
dimbor
Возможно, проблема в том, что в этих исходниках в progams/Xserver/hw/ нет директории nxagent. Больно уж точно послал - теперь обидно прибыть на место и не обнаружить искомого агента.
Уважаемый caspervova! У меня есть лёгкое ощущение того, что Вы тут руководствуетесь принципом "решите мне мою проблему, да побыстрее". Буду рад, если ошибаюсь, тогда просто не очень понимаю стиля Ваших постов.
А вообще, тут помощь очень специфичная. Никто никому не должен и убивает своё время ради удовольствия или собственных нужд. В таких тусовках гораздо проще самому решить проблему, слушая советы тех, кто мудр, но не страдает от переизбытка свободного времени, чем ждать, когда проблема решится :)
Я недавно столкнулся с тем, что мне нужен этот линуксовый буфер обмена, по работе. Если появится свободное время, а решения ещё не будет, сделаю исправление. Выложу максимум патч, никаких дебов или рпмов.
Возможно, проблема в том, что в этих исходниках в progams/Xserver/hw/ нет директории nxagent. Больно уж точно послал - теперь обидно прибыть на место и не обнаружить искомого агента.
Уважаемый caspervova! У меня есть лёгкое ощущение того, что Вы тут руководствуетесь принципом "решите мне мою проблему, да побыстрее". Буду рад, если ошибаюсь, тогда просто не очень понимаю стиля Ваших постов.
А вообще, тут помощь очень специфичная. Никто никому не должен и убивает своё время ради удовольствия или собственных нужд. В таких тусовках гораздо проще самому решить проблему, слушая советы тех, кто мудр, но не страдает от переизбытка свободного времени, чем ждать, когда проблема решится :)
Я недавно столкнулся с тем, что мне нужен этот линуксовый буфер обмена, по работе. Если появится свободное время, а решения ещё не будет, сделаю исправление. Выложу максимум патч, никаких дебов или рпмов.
-
dimbor
- Ведущий рубрики
- Сообщения: 1572
- Статус: Подвинутый участник
Re: 1Cv77+wine@etersoft+NXclient+буфер обмена
Hoblin писал(а): ↑22.06.2010 08:24Возможно, проблема в том, что в этих исходниках в progams/Xserver/hw/ нет директории nxagent. Больно уж точно послал - теперь обидно прибыть на место и не обнаружить искомого агента.
Как верно подмечено, тутошняя обстановочка сплетена из множества нюансов (во блин сказал
Дело в том, что этот тарбол - один из нескольких нужных. nxagent идет отдельным, а собирается все вместе. Полный паноптикум живет здесь. Отсыл именно к сырцам пакета был все-таки точным, т.к. там эти дела в зависимостях прописаны быть обязаны. По крайней мере для rpm это так.
-
Hoblin
- Модератор
- Сообщения: 1442
- Статус: Etersoft team
- ОС: ALT Linux
Re: 1Cv77+wine@etersoft+NXclient+буфер обмена
Хм, я правильно понял, что патч сведётся к перемене мест элементов xa_STRING? Или это патч для другого случая?
Когда уже выдастся время всем этим позаниматься? Уже руки чешутся, а возможности даже собрать nx и проверить нет :(
Код: Выделить всё
--- Clipboard.c 2010-06-22 14:40:36.000000000 +0400
+++ Clipboard.c.new 2010-06-22 14:39:37.000000000 +0400
@@ -1218,10 +1218,10 @@
Atom xa_STRING[4];
xEvent x;
- xa_STRING[0] = XA_STRING;
+ xa_STRING[0] = clientUTF8_STRING;
xa_STRING[1] = clientTEXT;
xa_STRING[2] = clientCOMPOUND_TEXT;
- xa_STRING[3] = clientUTF8_STRING;
+ xa_STRING[3] = XA_STRING;
ChangeWindowProperty(pWin,
property,Когда уже выдастся время всем этим позаниматься? Уже руки чешутся, а возможности даже собрать nx и проверить нет :(
-
dimbor
- Ведущий рубрики
- Сообщения: 1572
- Статус: Подвинутый участник
Re: 1Cv77+wine@etersoft+NXclient+буфер обмена
Так точно, это серверный патч для paste. На виндовом клиенте требует кода:
Еще есть copy. На вин-клиенте писано:
Там есть подозрение, что реквест должен быть один составной, но и с двумя работает.
На сервере же ему отвечает патч:
Это патч #2 из шапки "курощения". Там есть ссылка на родовые муки.
Соответственно, надо патчить "клиентскую" часть nxagent, в этом же clipboard.c и живущую. Смотреть, втыкая отладочные сообщения, что там когда вызывается, и напрягать мозг.
Повторюсь, не занимался не только потому, что не использую. Еще ведь юзабельный opennx появился сравнительно недавно, а родной клиент под линь легально не разобрать. Да, в етерсофтовской баголовке на эту тему где-то уже отписывал аналогичное (потерял).
Код: Выделить всё
Bool nxwinConvertSelection(ClientPtr client ,WindowPtr pWin, Atom selection, Window requestor, Atom property, Atom target, Time time)
{
......
#ifdef NXWIN_CLIPBOARD_DEBUG
ErrorF("ConvertSelection converting...\n");
#endif
if ((target == clientTEXT) ||
(target == XA_STRING) ||
(target == clientUTF8_STRING))
{
HGLOBAL hGlobal;
/* code bellow changed by dimbor - kill bug with noncorrect cut/paste international symbols */
wchar_t *pszGlobalData;
xEvent x;
/* Access the clipboard */
if (!OpenClipboard (lastHwnd)) return 0;
hGlobal = GetClipboardData (CF_UNICODETEXT);
if (!hGlobal)
{
CloseClipboard();
x.u.u.type = SelectionNotify;
x.u.selectionNotify.time = time;
x.u.selectionNotify.requestor = requestor;
x.u.selectionNotify.selection = selection;
x.u.selectionNotify.target = target;
x.u.selectionNotify.property = None;
(void) TryClientEvents(client, &x, 1, NoEventMask,
NoEventMask , NullGrab);
return 1;
}
pszGlobalData = (wchar_t *) GlobalLock (hGlobal);
char *pszData = unicode_to_cp(CP_ACP,pszGlobalData);
char *pszData2;
if (target == clientUTF8_STRING)
pszData2 = ansi_to_utf8(pszData);
else /* тут как раз и используется, что 1251 для винды "родная" кодировка */
pszData2 = pszData;
/* Convert DOS string to UNIX string */
DOStoUNIX (pszData2, strlen (pszData2));
/* Copy the clipboard text to the requesting window */
ChangeWindowProperty(pWin,
property,
target,
8,
PropModeReplace,
strlen(pszData2),
pszData2, 1);
/* Release the clipboard data */
GlobalUnlock (hGlobal);
pszGlobalData = NULL;
CloseClipboard ();
if(pszData)
free(pszData);
if (target == clientUTF8_STRING && pszData2)
free(pszData2);
/* ------------------------------------------------------------------- */
x.u.u.type = SelectionNotify;
x.u.selectionNotify.time = time;
x.u.selectionNotify.requestor = requestor;
x.u.selectionNotify.selection = selection;
x.u.selectionNotify.target = target;
x.u.selectionNotify.property = property;
(void) TryClientEvents(client, &x, 1, NoEventMask,
NoEventMask , NullGrab);
return 1;
}
return 0;
}Еще есть copy. На вин-клиенте писано:
Код: Выделить всё
void nxwinRequestSelection(void)
{
if (lastOwnerWindowPtr)
{
xEvent x;
x.u.u.type = SelectionRequest;
x.u.selectionRequest.time = GetTimeInMillis();
x.u.selectionRequest.owner = lastOwnerWindow;
x.u.selectionRequest.requestor = WindowTable[0]->drawable.id;
/* by dimbor - CLIPBOARD instead of PRIMARY ??? */
//x.u.selectionRequest.selection = clientCLIPBOARD;
x.u.selectionRequest.selection = nxwinLastSelection;
/* ------------------------------------------------ */
x.u.selectionRequest.target = clientUTF8_STRING;
x.u.selectionRequest.property = clientCutProperty;
(void) TryClientEvents (lastOwnerClientPtr, &x, 1,
NoEventMask, NoEventMask /* CantBeFiltered */,
NullGrab);
SetCriticalOutputPending();
x.u.selectionRequest.target = XA_STRING;
x.u.selectionRequest.time = GetTimeInMillis();
(void) TryClientEvents (lastOwnerClientPtr, &x, 1,
NoEventMask, NoEventMask /* CantBeFiltered */,
NullGrab);
SetCriticalOutputPending();
}
}
Bool nxwinSendNotify(xEvent* x)
{
int iReturn;
#ifdef NXWIN_CLIPBOARD_DEBUG
ErrorF("SendNotify\n");
#endif
if (x->u.selectionNotify.property == clientCutProperty)
{
Atom atomReturnType;
int iReturnFormat;
unsigned long ulReturnItems;
unsigned long ulReturnBytesLeft;
unsigned char *pszReturnData = NULL;
iReturn = GetWindowProperty(lastOwnerWindowPtr, clientCutProperty, 0, 0, FALSE,
AnyPropertyType, &atomReturnType, &iReturnFormat,
&ulReturnItems, &ulReturnBytesLeft, &pszReturnData);
if ((iReturn == Success) && (ulReturnBytesLeft > 0))
{
iReturn = GetWindowProperty(lastOwnerWindowPtr,clientCutProperty,0,ulReturnBytesLeft, FALSE,
AnyPropertyType, &atomReturnType, &iReturnFormat,
&ulReturnItems, &ulReturnBytesLeft, &pszReturnData);
if ((iReturn == Success) && (ulReturnItems > 0))
{
/* add by dimbor (idea from zahvatov)*/
if (x->u.selectionNotify.target != XA_STRING)
{
char * pszTemp = calloc(sizeof(char),ulReturnItems+1);
if (!pszTemp)
return FALSE;
memcpy(pszTemp, pszReturnData, ulReturnItems);
*(pszTemp + ulReturnItems) = 0;
char * pszTemp2 = utf8_to_ansi(pszTemp);
if (!pszTemp2)
return FALSE;
nxwinSetWindowClipboard(pszTemp2, strlen(pszTemp2));
free(pszTemp2);
}
/* ------------------------------------------------------------------- */
else /* original code */
{
nxwinSetWindowClipboard(pszReturnData, ulReturnItems);
}
clientOwner = TRUE;
/* nxwinClearSelection(); */
return TRUE;
}
}
}
return FALSE;
}Там есть подозрение, что реквест должен быть один составной, но и с двумя работает.
На сервере же ему отвечает патч:
Код: Выделить всё
--- Clipboard.c.orig 2008-11-26 22:56:51 +0300
+++ Clipboard.c 2008-12-15 04:33:59 +0300
@@ -166,7 +166,9 @@
if (target == XA_STRING) return True;
if (target == serverTEXT) return True;
-
+ /* by dimbor */
+ if (target == serverUTF8_STRING) return True;
+
return False;
}
@@ -402,7 +404,12 @@
lastServerProperty = X->xselectionrequest.property;
lastServerRequestor = X->xselectionrequest.requestor;
lastServerTarget = X->xselectionrequest.target;
- lastServerTime = X->xselectionrequest.time;
+
+ /* by dimbor */
+ if (lastServerTarget != XA_STRING)
+ lastServerTarget = serverUTF8_STRING;
+
+ lastServerTime = X->xselectionrequest.time;
x.u.u.type = SelectionRequest;
x.u.selectionRequest.time = GetTimeInMillis();
@@ -424,11 +431,12 @@
x.u.selectionRequest.selection = CurrentSelections[i].selection;
- /*
- * x.u.selectionRequest.target = X->xselectionrequest.target;
- */
-
- x.u.selectionRequest.target = XA_STRING;
+ /* by dimbor (idea from zahvatov) */
+ if (X->xselectionrequest.target != XA_STRING)
+ x.u.selectionRequest.target = clientUTF8_STRING;
+ else
+ x.u.selectionRequest.target = XA_STRING;
+
x.u.selectionRequest.property = clientCutProperty;
(void) TryClientEvents(lastSelectionOwner[i].client, &x, 1,Это патч #2 из шапки "курощения". Там есть ссылка на родовые муки.
Соответственно, надо патчить "клиентскую" часть nxagent, в этом же clipboard.c и живущую. Смотреть, втыкая отладочные сообщения, что там когда вызывается, и напрягать мозг.
Повторюсь, не занимался не только потому, что не использую. Еще ведь юзабельный opennx появился сравнительно недавно, а родной клиент под линь легально не разобрать. Да, в етерсофтовской баголовке на эту тему где-то уже отписывал аналогичное (потерял).
-
caspervova
- Сообщения: 9
- ОС: linux ubuntu 10.04 i386
Re: 1Cv77+wine@etersoft+NXclient+буфер обмена
всем спасибо! проблема решена... етерсофтовцы устранили проблему...
-
dimbor
- Ведущий рубрики
- Сообщения: 1572
- Статус: Подвинутый участник
Re: 1Cv77+wine@etersoft+NXclient+буфер обмена
Еще бы узнать, как решили.
-
caspervova
- Сообщения: 9
- ОС: linux ubuntu 10.04 i386
-
dimbor
- Ведущий рубрики
- Сообщения: 1572
- Статус: Подвинутый участник
Re: 1Cv77+wine@etersoft+NXclient+буфер обмена
Последний патч чего, вайна что-ли?
-
caspervova
- Сообщения: 9
- ОС: linux ubuntu 10.04 i386