Я использую rdesktop с seamlessrdp. Таким образом, я могу открывать приложения Windows на своих машинах с Linux. Также я добавил devilspie2 в микс, чтобы контролировать оформление окон. devilspie2 использует lua для управления конфигурацией. Я заставил все работать. Единственная оставшаяся проблема - переместить открывающие (диалоговые) окна на пару пикселей, потому что окна VNC будут выглядеть так, как будто у них есть украшения (но без них). Я получил работающий код, жестко запрограммировав количество пикселей, необходимое для перемещения. Проблема в том, что у нас есть несколько дистрибутивов, и они имеют разные размеры пикселей для своих оконных декораций.
Я хочу получить размер украшения в пикселях вместо жесткого кодирования, чтобы он идеально работал для всех моих дистрибутивов.
Вот фрагмент кода, который делает это atm:
if get_window_class()=="SeamlessRDP" then
undecorate_window();
--x-1 and y-28 works for one distro but for the other I need to use x-6 and y-27
if get_window_type()=="WINDOW_TYPE_DIALOG" then
x, y = xy();
xy(x-1, y-28);
end
end
Как видно из сценария. Было бы намного лучше, если бы я мог как-то назвать размер оконных декораций, а затем использовать их вместо жестко закодированных пикселей.
РЕДАКТИРОВАТЬ (ОТВЕТ):
Несмотря на то, что я нашел ответ до следующего поста, я все равно хотел его принять, потому что он действительно показал правильный путь для подражания. Я только комментирую здесь, чтобы показать полный ответ:
--get x and y's for decorated and non-decorated windows
x1, y1, width1, height1 = get_window_geometry();
x2, y2, width2, height2 = get_window_client_geometry();
--calculate pixels to slide window
xpixel = x2-x1;
ypixel = y2-y1;
--check if class is seamlessrdp
if get_window_class()=="SeamlessRDP" then
undecorate_window();
--if window is a dialog then move it
if get_window_type()=="WINDOW_TYPE_DIALOG" then
xy(x1-xpixel, y1-ypixel);
end
end