From 54132992654264757c0dffebff9a6c20fb641990 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Thu, 2 Feb 2023 19:33:19 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F=20CMake?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 47 ---- FreeRDP_X11_path_config/CMakeLists.txt | 253 ------------------ FreeRDP_X11_path_config/README.md | 5 - FreeRDP_X11_path_config/cli/.gitignore | 2 - FreeRDP_X11_path_config/cli/CMakeLists.txt | 51 ---- README.md | 73 ++++- address.c => freerdp/client/X11/cli/address.c | 0 address.h => freerdp/client/X11/cli/address.h | 0 .../client/X11/cli/arguments.c | 0 .../client/X11/cli/arguments.h | 0 concat.c => freerdp/client/X11/cli/concat.c | 0 concat.h => freerdp/client/X11/cli/concat.h | 0 db.c => freerdp/client/X11/cli/db.c | 0 db.h => freerdp/client/X11/cli/db.h | 0 gui.c => freerdp/client/X11/cli/gui.c | 4 +- gui.h => freerdp/client/X11/cli/gui.h | 0 images.c => freerdp/client/X11/cli/images.c | 0 images.h => freerdp/client/X11/cli/images.h | 0 monitor.c => freerdp/client/X11/cli/monitor.c | 0 monitor.h => freerdp/client/X11/cli/monitor.h | 0 .../client/X11/cli/node_settings.c | 0 .../client/X11/cli/node_settings.h | 0 .../client/X11/cli/parameter.h | 0 rxrandr.c => freerdp/client/X11/cli/rxrandr.c | 0 rxrandr.h => freerdp/client/X11/cli/rxrandr.h | 0 .../client/X11/cli/rxrandr_broker.c | 0 .../client/X11/cli/settings.c | 0 .../client/X11/cli/settings.h | 0 value.h => freerdp/client/X11/cli/value.h | 0 freerdp/client/X11/cli/xrdp.c | 71 +++++ xrdp.h => freerdp/client/X11/cli/xrdp.h | 0 freerdp/cmake/FindIUP.cmake | 19 ++ freerdp/cmake/FindSQLite.cmake | 19 ++ gui.patch | 200 ++++++++++++++ sqlite3.a => sqlite3/sqlite3.a | Bin sqlite3.h => sqlite3/sqlite3.h | 0 xfreerdp.c | 24 -- xrandr.patch | 13 + xrdp.c | 71 ----- 39 files changed, 392 insertions(+), 460 deletions(-) delete mode 100644 CMakeLists.txt delete mode 100644 FreeRDP_X11_path_config/CMakeLists.txt delete mode 100644 FreeRDP_X11_path_config/README.md delete mode 100644 FreeRDP_X11_path_config/cli/.gitignore delete mode 100644 FreeRDP_X11_path_config/cli/CMakeLists.txt rename address.c => freerdp/client/X11/cli/address.c (100%) rename address.h => freerdp/client/X11/cli/address.h (100%) rename arguments.c => freerdp/client/X11/cli/arguments.c (100%) rename arguments.h => freerdp/client/X11/cli/arguments.h (100%) rename concat.c => freerdp/client/X11/cli/concat.c (100%) rename concat.h => freerdp/client/X11/cli/concat.h (100%) rename db.c => freerdp/client/X11/cli/db.c (100%) rename db.h => freerdp/client/X11/cli/db.h (100%) rename gui.c => freerdp/client/X11/cli/gui.c (99%) rename gui.h => freerdp/client/X11/cli/gui.h (100%) rename images.c => freerdp/client/X11/cli/images.c (100%) rename images.h => freerdp/client/X11/cli/images.h (100%) rename monitor.c => freerdp/client/X11/cli/monitor.c (100%) rename monitor.h => freerdp/client/X11/cli/monitor.h (100%) rename node_settings.c => freerdp/client/X11/cli/node_settings.c (100%) rename node_settings.h => freerdp/client/X11/cli/node_settings.h (100%) rename parameter.h => freerdp/client/X11/cli/parameter.h (100%) rename rxrandr.c => freerdp/client/X11/cli/rxrandr.c (100%) rename rxrandr.h => freerdp/client/X11/cli/rxrandr.h (100%) rename rxrandr_broker.c => freerdp/client/X11/cli/rxrandr_broker.c (100%) rename settings.c => freerdp/client/X11/cli/settings.c (100%) rename settings.h => freerdp/client/X11/cli/settings.h (100%) rename value.h => freerdp/client/X11/cli/value.h (100%) create mode 100644 freerdp/client/X11/cli/xrdp.c rename xrdp.h => freerdp/client/X11/cli/xrdp.h (100%) create mode 100644 freerdp/cmake/FindIUP.cmake create mode 100644 freerdp/cmake/FindSQLite.cmake create mode 100644 gui.patch rename sqlite3.a => sqlite3/sqlite3.a (100%) rename sqlite3.h => sqlite3/sqlite3.h (100%) delete mode 100644 xfreerdp.c create mode 100644 xrandr.patch delete mode 100644 xrdp.c diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index ee79ee1..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,47 +0,0 @@ -cmake_minimum_required(VERSION 2.8) -project(xfree) -#include_directories(/home/alexander/repositories/iup/include) -include_directories(/root/iup/include) -set(SOURCE_EXE - address.c - arguments.c - concat.c - db.c - gui.c - images.c - monitor.c - node_settings.c - rxrandr_broker.c - rxrandr.c - settings.c - xfreerdp.c - xrdp.c -) -add_executable(xfree ${SOURCE_EXE}) -#target_link_libraries(xfree iup X11 Xrandr m /home/alexander/programming/c/iup/sqlite3.a) -target_link_libraries(xfree - gtk-3 - gdk-3 - pangocairo-1.0 - pango-1.0 - atk-1.0 - cairo-gobject - cairo - gdk_pixbuf-2.0 - gio-2.0 - gobject-2.0 - glib-2.0 - X11 - Xrandr - m - dl - pthread - - /root/iup/lib/Linux515/libiup.a - /root/SQLite/sqlite3.a -) -#target_link_libraries(xfree iup X11 Xrandr m sqlite3 -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lX11 -lXrandr -lm) - -if(WITH_COLOR_BUTTONS) - add_definitions(-DWITH_COLOR_BUTTONS) -endif() diff --git a/FreeRDP_X11_path_config/CMakeLists.txt b/FreeRDP_X11_path_config/CMakeLists.txt deleted file mode 100644 index 1ab8209..0000000 --- a/FreeRDP_X11_path_config/CMakeLists.txt +++ /dev/null @@ -1,253 +0,0 @@ -# FreeRDP: A Remote Desktop Protocol Implementation -# FreeRDP X11 Client -# -# Copyright 2012 Marc-Andre Moreau -# Copyright 2013 Corey Clayton -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -set(MODULE_NAME "xfreerdp-client") -set(MODULE_PREFIX "FREERDP_CLIENT_X11_CONTROL") - -include(FindDocBookXSL) -include_directories(${X11_INCLUDE_DIRS}) -include_directories(${OPENSSL_INCLUDE_DIR}) - -include_directories(iup PRIVATE /root/iup/iup/source/include) - -set(${MODULE_PREFIX}_SRCS - xf_gdi.c - xf_gdi.h - xf_gfx.c - xf_gfx.h - xf_rail.c - xf_rail.h - xf_input.c - xf_input.h - xf_event.c - xf_event.h - xf_floatbar.c - xf_floatbar.h - xf_input.c - xf_input.h - xf_channels.c - xf_channels.h - xf_cliprdr.c - xf_cliprdr.h - xf_monitor.c - xf_monitor.h - xf_disp.c - xf_disp.h - xf_graphics.c - xf_graphics.h - xf_keyboard.c - xf_keyboard.h - xf_video.c - xf_video.h - xf_window.c - xf_window.h - xf_client.c - xf_client.h) - -if (CHANNEL_TSMF_CLIENT) - set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} - xf_tsmf.c - xf_tsmf.h) -endif() - -if(WITH_CLIENT_INTERFACE) - if(CLIENT_INTERFACE_SHARED) - add_library(${MODULE_NAME} SHARED ${${MODULE_PREFIX}_SRCS}) - if (WITH_LIBRARY_VERSIONING) - set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION}) - endif() - else() - add_library(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) - endif() - -else() - set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} cli/xfreerdp.c cli/images.c xfreerdp.h cli/arguments.c cli/concat.c cli/gui.c cli/node_settings.c cli/rxrandr_broker cli/rxrandr.c cli/settings.c cli/db.c cli/address.c cli/monitor.c cli/xrdp.c) - add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) - set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "xfreerdp") - include_directories(..) -endif() - -set(${MODULE_PREFIX}_LIBS - ${X11_LIBRARIES}) - -if(WITH_MANPAGES) - find_program(XSLTPROC_EXECUTABLE NAMES xsltproc) - - if(DOCBOOKXSL_FOUND AND XSLTPROC_EXECUTABLE) - - # We need the variable ${MAN_TODAY} to contain the current date in ISO - # format to replace it in the configure_file step. - include(today) - - TODAY(MAN_TODAY) - - configure_file(xfreerdp.1.xml.in xfreerdp.1.xml @ONLY IMMEDIATE) - - # Compile the helper tool with default compiler settings. - # We need the include paths though. - get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES) - set(GENERATE_INCLUDES "") - foreach(dir ${dirs}) - set(GENERATE_INCLUDES ${GENERATE_INCLUDES} -I${dir}) - endforeach(dir) - - add_custom_command(OUTPUT xfreerdp.1 - COMMAND ${CMAKE_C_COMPILER} ${GENERATE_INCLUDES} - ${CMAKE_CURRENT_SOURCE_DIR}/generate_argument_docbook.c - -o ${CMAKE_CURRENT_BINARY_DIR}/generate_argument_docbook - COMMAND ${CMAKE_CURRENT_BINARY_DIR}/generate_argument_docbook - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-channels.1.xml ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-examples.1.xml ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-envvar.1.xml ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${XSLTPROC_EXECUTABLE} ${DOCBOOKXSL_DIR}/manpages/docbook.xsl xfreerdp.1.xml - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS - ${CMAKE_CURRENT_BINARY_DIR}/xfreerdp.1.xml - ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-examples.1.xml - ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-channels.1.xml - ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-envvar.1.xml) - - add_custom_target(xfreerdp.manpage ALL - DEPENDS xfreerdp.1) - - install_freerdp_man(${CMAKE_CURRENT_BINARY_DIR}/xfreerdp.1 1) - else() - message(WARNING "WITH_MANPAGES was set, but xsltproc was not found. man-pages will not be installed") - endif() -endif(WITH_MANPAGES) - -set(XSHM_FEATURE_TYPE "REQUIRED") -set(XSHM_FEATURE_PURPOSE "X11 shared memory") -set(XSHM_FEATURE_DESCRIPTION "X11 shared memory extension") - -set(XINERAMA_FEATURE_TYPE "RECOMMENDED") -set(XINERAMA_FEATURE_PURPOSE "multi-monitor") -set(XINERAMA_FEATURE_DESCRIPTION "X11 multi-monitor extension") - -set(XEXT_FEATURE_TYPE "RECOMMENDED") -set(XEXT_FEATURE_PURPOSE "X11 extension") -set(XEXT_FEATURE_DESCRIPTION "X11 core extensions") - -set(XCURSOR_FEATURE_TYPE "RECOMMENDED") -set(XCURSOR_FEATURE_PURPOSE "cursor") -set(XCURSOR_FEATURE_DESCRIPTION "X11 cursor extension") - -set(XV_FEATURE_TYPE "RECOMMENDED") -set(XV_FEATURE_PURPOSE "video") -set(XV_FEATURE_DESCRIPTION "X11 video extension") - -set(XI_FEATURE_TYPE "RECOMMENDED") -set(XI_FEATURE_PURPOSE "input") -set(XI_FEATURE_DESCRIPTION "X11 input extension") - -set(XRENDER_FEATURE_TYPE "RECOMMENDED") -set(XRENDER_FEATURE_PURPOSE "rendering") -set(XRENDER_FEATURE_DESCRIPTION "X11 render extension") - -set(XRANDR_FEATURE_TYPE "RECOMMENDED") -set(XRANDR_FEATURE_PURPOSE "tracking output configuration") -set(XRANDR_FEATURE_DESCRIPTION "X11 randr extension") - -set(XFIXES_FEATURE_TYPE "RECOMMENDED") -set(XFIXES_FEATURE_PURPOSE "X11 xfixes extension") -set(XFIXES_FEATURE_DESCRIPTION "Useful additions to the X11 core protocol") - -find_feature(XShm ${XSHM_FEATURE_TYPE} ${XSHM_FEATURE_PURPOSE} ${XSHM_FEATURE_DESCRIPTION}) -find_feature(Xinerama ${XINERAMA_FEATURE_TYPE} ${XINERAMA_FEATURE_PURPOSE} ${XINERAMA_FEATURE_DESCRIPTION}) -find_feature(Xext ${XEXT_FEATURE_TYPE} ${XEXT_FEATURE_PURPOSE} ${XEXT_FEATURE_DESCRIPTION}) -find_feature(Xcursor ${XCURSOR_FEATURE_TYPE} ${XCURSOR_FEATURE_PURPOSE} ${XCURSOR_FEATURE_DESCRIPTION}) -find_feature(Xv ${XV_FEATURE_TYPE} ${XV_FEATURE_PURPOSE} ${XV_FEATURE_DESCRIPTION}) -find_feature(Xi ${XI_FEATURE_TYPE} ${XI_FEATURE_PURPOSE} ${XI_FEATURE_DESCRIPTION}) -find_feature(Xrender ${XRENDER_FEATURE_TYPE} ${XRENDER_FEATURE_PURPOSE} ${XRENDER_FEATURE_DESCRIPTION}) -find_feature(XRandR ${XRANDR_FEATURE_TYPE} ${XRANDR_FEATURE_PURPOSE} ${XRANDR_FEATURE_DESCRIPTION}) -find_feature(Xfixes ${XFIXES_FEATURE_TYPE} ${XFIXES_FEATURE_PURPOSE} ${XFIXES_FEATURE_DESCRIPTION}) - -if(WITH_XINERAMA) - add_definitions(-DWITH_XINERAMA) - include_directories(${XINERAMA_INCLUDE_DIRS}) - set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XINERAMA_LIBRARIES}) -endif() - -if(WITH_XEXT) - add_definitions(-DWITH_XEXT) - include_directories(${XEXT_INCLUDE_DIRS}) - set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XEXT_LIBRARIES}) -endif() - -if(WITH_XCURSOR) - add_definitions(-DWITH_XCURSOR) - include_directories(${XCURSOR_INCLUDE_DIRS}) - set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XCURSOR_LIBRARIES}) -endif() - -if(WITH_XV) - add_definitions(-DWITH_XV) - include_directories(${XV_INCLUDE_DIRS}) - set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XV_LIBRARIES}) -endif() - -if(WITH_XI) - add_definitions(-DWITH_XI) - include_directories(${XI_INCLUDE_DIRS}) - set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XI_LIBRARIES}) -endif() - -if(WITH_XRENDER) - add_definitions(-DWITH_XRENDER) - include_directories(${XRENDER_INCLUDE_DIRS}) - set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XRENDER_LIBRARIES}) -endif() - -if(WITH_XRANDR) - add_definitions(-DWITH_XRANDR) - include_directories(${XRANDR_INCLUDE_DIRS}) - set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XRANDR_LIBRARIES}) -endif() - -if(WITH_XFIXES) - add_definitions(-DWITH_XFIXES) - include_directories(${XFIXES_INCLUDE_DIRS}) - set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XFIXES_LIBRARIES}) -endif() - -include_directories(${CMAKE_SOURCE_DIR}/resources) - -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-client freerdp m) -if (NOT APPLE) - list(APPEND ${MODULE_PREFIX}_LIBS rt) -endif() -#target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${${MODULE_PREFIX}_LIBS} iup /root/xfreerdp/source/client/X11/sqlite3.a) -target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${${MODULE_PREFIX}_LIBS} iup sqlite3) -#target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${${MODULE_PREFIX}_LIBS} iup Xrandr -L/home/alexander/programming/c/FreeRDP/client/X11/cli/sqlite3.a -lsqlite3) - -if(WITH_IPP) - target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${IPP_LIBRARY_LIST}) -endif() - -if(WITH_CLIENT_INTERFACE) - install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries) - add_subdirectory(cli) -else() - install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT client) -endif() - -set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/X11") - diff --git a/FreeRDP_X11_path_config/README.md b/FreeRDP_X11_path_config/README.md deleted file mode 100644 index ca84a3f..0000000 --- a/FreeRDP_X11_path_config/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# CMake-файлы для FreeRDP - -Файлы основаны на [FreeRDP 2.8.0](https://github.com/FreeRDP/FreeRDP) - -Необходимо поместить в каталог проекта `./client/X11`. diff --git a/FreeRDP_X11_path_config/cli/.gitignore b/FreeRDP_X11_path_config/cli/.gitignore deleted file mode 100644 index 6ddebc6..0000000 --- a/FreeRDP_X11_path_config/cli/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -xfreerdp - diff --git a/FreeRDP_X11_path_config/cli/CMakeLists.txt b/FreeRDP_X11_path_config/cli/CMakeLists.txt deleted file mode 100644 index a2ce9e1..0000000 --- a/FreeRDP_X11_path_config/cli/CMakeLists.txt +++ /dev/null @@ -1,51 +0,0 @@ -# FreeRDP: A Remote Desktop Protocol Implementation -# FreeRDP X11 cmake build script -# -# Copyright 2012 Marc-Andre Moreau -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -set(MODULE_NAME "xfreerdp-cli") -set(MODULE_PREFIX "FREERDP_CLIENT_X11") - -set(${MODULE_PREFIX}_SRCS - xfreerdp.c - images.c, - arguments.c, - concat.c, - gui.c, - node_settings.c, - rxrandr_broker.c, - rxrandr.c, - settings.c, - db.c, - address.c, - monitor.c, - xrdp.c - ) - -add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) -set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "xfreerdp" RUNTIME_OUTPUT_DIRECTORY "..") - -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} xfreerdp-client freerdp-client) - -if(OPENBSD) - target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS} ossaudio) -else() - target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) -endif() - -install(TARGETS ${MODULE_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT client) - -set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/X11") - diff --git a/README.md b/README.md index 6c2f80f..37a1131 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,74 @@ # GUI для FreeRDP -Надстройка для FreeRDP на основе библиотеки [`IUP`](https://www.tecgraf.puc-rio.br/iup/). - -## Основное окно +- Основано на базе [FreeRDP 2.9.0](https://github.com/FreeRDP/FreeRDP) ([локальная версия](http://git.belpig.ru/forks/FreeRDP)) +- Надстройка для FreeRDP на основе библиотеки [`IUP`](https://www.tecgraf.puc-rio.br/iup/). ![main.png](img/main.png) -## Окно настроек - ![settings.png](img/settings.png) + +## Сборка программы + +- [xrandr.patch](xrandr.patch) - исправления поиска библиотеки `Xrandr` +- [gui.patch](gui.patch) - включение использования GUI в оригинальный проект `freerdp` + +### Подготовка + +Скопировать файлы из [freerdp](freerdp/) в оригинальный проект `(2.9.0)`: + +```sh +cp -r GUI-FreeRDP/freerdp/* freerdp-2.9.0/ +``` + +Перейти в оригинальный каталог: + +```sh +cd freerdp-2.9.0 +``` + +Применить патчи: + +```sh +git apply ../GUI-FreeRDP/gui.patch +git apply ../GUI-FreeRDP/xrandr.patch +``` + +## Сборка + +Параметр `WITH_COLOR_BUTTONS` отвечает за окрашивание кнопок. + +Создать отдельный каталог `build`: + +```sh +mkdir build +cd build +``` + +и выполнить в нём сборку: + +```sh +cmake -B . -S .. \ + -DWITH_WAYLAND=OFF \ + -DWITH_OSS=OFF \ + -DWITH_ALSA=OFF \ + -DWITH_PULSE=OFF \ + -DWITH_CUPS=OFF \ + -DWITH_PCSC=OFF \ + -DWITH_FFMPEG=OFF \ + -DWITH_OPENSSL=ON \ + -DWITH_XV=OFF \ + -DWITH_FUSE=OFF \ + -DWITH_SWSCALE=OFF \ + -DWITH_CAIRO=OFF \ + -DWITH_DSP_FFMPEG=OFF \ + -DWITH_FAAC=OFF \ + -DWITH_SSE2=ON \ + -DWITH_COLOR_BUTTONS=ON \ + -DBUILD_SHARED_LIBS=OFF +``` + +и компиляцию программы: + +```sh +make -j16 +``` diff --git a/address.c b/freerdp/client/X11/cli/address.c similarity index 100% rename from address.c rename to freerdp/client/X11/cli/address.c diff --git a/address.h b/freerdp/client/X11/cli/address.h similarity index 100% rename from address.h rename to freerdp/client/X11/cli/address.h diff --git a/arguments.c b/freerdp/client/X11/cli/arguments.c similarity index 100% rename from arguments.c rename to freerdp/client/X11/cli/arguments.c diff --git a/arguments.h b/freerdp/client/X11/cli/arguments.h similarity index 100% rename from arguments.h rename to freerdp/client/X11/cli/arguments.h diff --git a/concat.c b/freerdp/client/X11/cli/concat.c similarity index 100% rename from concat.c rename to freerdp/client/X11/cli/concat.c diff --git a/concat.h b/freerdp/client/X11/cli/concat.h similarity index 100% rename from concat.h rename to freerdp/client/X11/cli/concat.h diff --git a/db.c b/freerdp/client/X11/cli/db.c similarity index 100% rename from db.c rename to freerdp/client/X11/cli/db.c diff --git a/db.h b/freerdp/client/X11/cli/db.h similarity index 100% rename from db.h rename to freerdp/client/X11/cli/db.h diff --git a/gui.c b/freerdp/client/X11/cli/gui.c similarity index 99% rename from gui.c rename to freerdp/client/X11/cli/gui.c index 5e87e7a..53afea6 100644 --- a/gui.c +++ b/freerdp/client/X11/cli/gui.c @@ -18,7 +18,7 @@ #include "db.h" #include "xrdp.h" -//#include "../xfreerdp.h" +#include "../xfreerdp.h" static int guiExit(Ihandle *self) { @@ -163,7 +163,7 @@ Ihandle* guiStart() IupSetAttribute(labelUser, "PADDING", "5"); inputUser = IupText(NULL); IupSetAttribute(inputUser, "NAME", "USER"); - IupSetAttribute(inputUser, "TIP", "<домен>\\<имя пользователя>\n<имя пользователя>@<домен>\n(обязательное для заполнения поле)") + IupSetAttribute(inputUser, "TIP", "<домен>\\<имя пользователя>\n<имя пользователя>@<домен>\n(обязательное для заполнения поле)"); IupSetAttribute(inputUser, "VALUE", getSetValueCurrent(PARAMETER_USERNAME)); IupSetAttribute(inputUser, "SIZE", "100"); IupSetAttribute(inputUser, "MASK", "(/w|[/./\\/@/-])*"); diff --git a/gui.h b/freerdp/client/X11/cli/gui.h similarity index 100% rename from gui.h rename to freerdp/client/X11/cli/gui.h diff --git a/images.c b/freerdp/client/X11/cli/images.c similarity index 100% rename from images.c rename to freerdp/client/X11/cli/images.c diff --git a/images.h b/freerdp/client/X11/cli/images.h similarity index 100% rename from images.h rename to freerdp/client/X11/cli/images.h diff --git a/monitor.c b/freerdp/client/X11/cli/monitor.c similarity index 100% rename from monitor.c rename to freerdp/client/X11/cli/monitor.c diff --git a/monitor.h b/freerdp/client/X11/cli/monitor.h similarity index 100% rename from monitor.h rename to freerdp/client/X11/cli/monitor.h diff --git a/node_settings.c b/freerdp/client/X11/cli/node_settings.c similarity index 100% rename from node_settings.c rename to freerdp/client/X11/cli/node_settings.c diff --git a/node_settings.h b/freerdp/client/X11/cli/node_settings.h similarity index 100% rename from node_settings.h rename to freerdp/client/X11/cli/node_settings.h diff --git a/parameter.h b/freerdp/client/X11/cli/parameter.h similarity index 100% rename from parameter.h rename to freerdp/client/X11/cli/parameter.h diff --git a/rxrandr.c b/freerdp/client/X11/cli/rxrandr.c similarity index 100% rename from rxrandr.c rename to freerdp/client/X11/cli/rxrandr.c diff --git a/rxrandr.h b/freerdp/client/X11/cli/rxrandr.h similarity index 100% rename from rxrandr.h rename to freerdp/client/X11/cli/rxrandr.h diff --git a/rxrandr_broker.c b/freerdp/client/X11/cli/rxrandr_broker.c similarity index 100% rename from rxrandr_broker.c rename to freerdp/client/X11/cli/rxrandr_broker.c diff --git a/settings.c b/freerdp/client/X11/cli/settings.c similarity index 100% rename from settings.c rename to freerdp/client/X11/cli/settings.c diff --git a/settings.h b/freerdp/client/X11/cli/settings.h similarity index 100% rename from settings.h rename to freerdp/client/X11/cli/settings.h diff --git a/value.h b/freerdp/client/X11/cli/value.h similarity index 100% rename from value.h rename to freerdp/client/X11/cli/value.h diff --git a/freerdp/client/X11/cli/xrdp.c b/freerdp/client/X11/cli/xrdp.c new file mode 100644 index 0000000..7e2ef1f --- /dev/null +++ b/freerdp/client/X11/cli/xrdp.c @@ -0,0 +1,71 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +#include +#include + +#include "../xf_client.h" +#include "../xfreerdp.h" + +#include +#include +#include +#include + +#include "xrdp.h" + +int free_rdp_connect(int argc, char **argv) +{ + int rc = 1; + int status; + HANDLE thread; + xfContext *xfc; + DWORD dwExitCode; + rdpContext *context; + rdpSettings *settings; + RDP_CLIENT_ENTRY_POINTS clientEntryPoints; + + ZeroMemory(&clientEntryPoints, sizeof(RDP_CLIENT_ENTRY_POINTS)); + clientEntryPoints.Size = sizeof(RDP_CLIENT_ENTRY_POINTS); + clientEntryPoints.Version = RDP_CLIENT_INTERFACE_VERSION; + + RdpClientEntry(&clientEntryPoints); + + context = freerdp_client_context_new(&clientEntryPoints); + if (!context) + return 1; + + settings = context->settings; + xfc = (xfContext*) context; + + status = freerdp_client_settings_parse_command_line(context->settings, argc, argv, FALSE); + if (status) + { + rc = freerdp_client_settings_command_line_status_print(settings, status, argc, argv); + + if (settings->ListMonitors) + xf_list_monitors(xfc); + + goto out; + } + + if (freerdp_client_start(context) != 0) + goto out; + + thread = freerdp_client_get_thread(context); + + WaitForSingleObject(thread, INFINITE); + GetExitCodeThread(thread, &dwExitCode); + rc = xf_exit_code_from_disconnect_reason(dwExitCode); + + freerdp_client_stop(context); + + out: freerdp_client_context_free(context); + + return rc; +} diff --git a/xrdp.h b/freerdp/client/X11/cli/xrdp.h similarity index 100% rename from xrdp.h rename to freerdp/client/X11/cli/xrdp.h diff --git a/freerdp/cmake/FindIUP.cmake b/freerdp/cmake/FindIUP.cmake new file mode 100644 index 0000000..aee8af9 --- /dev/null +++ b/freerdp/cmake/FindIUP.cmake @@ -0,0 +1,19 @@ +find_path(IUP_INCLUDE_DIR NAMES iup.h + PATHS /home/alexander/repositories/iup/include + DOC "The IUP include directory" +) + +find_library(IUP_LIBRARY NAMES iup + PATHS /home/alexander/repositories/iup + DOC "The IUP library" +) + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(IUP DEFAULT_MSG IUP_LIBRARY IUP_INCLUDE_DIR) + +if(IUP_FOUND) + set( IUP_LIBRARIES ${IUP_LIBRARY} ) + set( IUP_INCLUDE_DIRS ${IUP_INCLUDE_DIR} ) +endif() + +mark_as_advanced(IUP_INCLUDE_DIR IUP_LIBRARY) diff --git a/freerdp/cmake/FindSQLite.cmake b/freerdp/cmake/FindSQLite.cmake new file mode 100644 index 0000000..f0907a3 --- /dev/null +++ b/freerdp/cmake/FindSQLite.cmake @@ -0,0 +1,19 @@ +find_path(SQLITE_INCLUDE_DIR NAMES sqlite3.h + PATHS /usr/include + DOC "The SQLITE include directory" +) + +find_library(SQLITE_LIBRARY NAMES sqlite3 + PATHS /usr/lib64 + DOC "The SQLITE library" +) + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SQLite DEFAULT_MSG SQLITE_LIBRARY SQLITE_INCLUDE_DIR) + +if(SQLITE_FOUND) + set( SQLITE_LIBRARIES ${SQLITE_LIBRARY} ) + set( SQLITE_INCLUDE_DIRS ${SQLITE_INCLUDE_DIR} ) +endif() + +mark_as_advanced(SQLITE_INCLUDE_DIR SQLITE_LIBRARY) diff --git a/gui.patch b/gui.patch new file mode 100644 index 0000000..eb66a99 --- /dev/null +++ b/gui.patch @@ -0,0 +1,200 @@ +diff --git a/client/X11/CMakeLists.txt b/client/X11/CMakeLists.txt +index 869652c..0588402 100644 +--- a/client/X11/CMakeLists.txt ++++ b/client/X11/CMakeLists.txt +@@ -57,6 +57,37 @@ set(${MODULE_PREFIX}_SRCS + xf_client.c + xf_client.h) + ++set(${GUI_IUP}_SRCS ++ cli/xfreerdp.c ++ cli/images.c ++ xfreerdp.h ++ cli/xrdp.h ++ cli/arguments.c ++ cli/concat.c ++ cli/gui.c ++ cli/node_settings.c ++ cli/rxrandr_broker.c ++ cli/rxrandr.c ++ cli/settings.c ++ cli/db.c ++ cli/address.c ++ cli/monitor.c ++ cli/xrdp.c) ++ ++set(IUP_FEATURE_TYPE "REQUIRED") ++set(IUP_FEATURE_PURPOSE "IUP extension") ++set(IUP_FEATURE_DESCRIPTION "Multi-platform toolkit") ++ ++include_directories(${IUP_INCLUDE_DIRS}) ++find_feature(IUP ${IUP_FEATURE_TYPE} ${IUP_FEATURE_PURPOSE} ${IUP_FEATURE_DESCRIPTION}) ++ ++set(SQLITE_FEATURE_TYPE "REQUIRED") ++set(SQLITE_FEATURE_PURPOSE "SQLite extension") ++set(SQLITE_FEATURE_DESCRIPTION "C-language library SQL database engine") ++ ++include_directories(${SQLITE_INCLUDE_DIRS}) ++find_feature(SQLite ${SQLITE_FEATURE_TYPE} ${SQLITE_FEATURE_PURPOSE} ${SQLITE_FEATURE_DESCRIPTION}) ++ + if (CHANNEL_TSMF_CLIENT) + set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} + xf_tsmf.c +@@ -74,7 +105,7 @@ if(WITH_CLIENT_INTERFACE) + endif() + + else() +- set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} cli/xfreerdp.c xfreerdp.h) ++ set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} ${${GUI_IUP}_SRCS}) + add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) + set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "xfreerdp") + include_directories(..) +@@ -226,13 +257,17 @@ if(WITH_XFIXES) + set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${XFIXES_LIBRARIES}) + endif() + ++if(WITH_COLOR_BUTTONS) ++ add_definitions(-DWITH_COLOR_BUTTONS) ++endif() ++ + include_directories(${CMAKE_SOURCE_DIR}/resources) + + set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-client freerdp m) + if (NOT APPLE) + list(APPEND ${MODULE_PREFIX}_LIBS rt) + endif() +-target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${${MODULE_PREFIX}_LIBS}) ++target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${${MODULE_PREFIX}_LIBS} ${IUP_LIBRARIES} ${SQLITE_LIBRARIES}) + + if(WITH_IPP) + target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${IPP_LIBRARY_LIST}) +diff --git a/client/X11/cli/CMakeLists.txt b/client/X11/cli/CMakeLists.txt +index 5f805c2..1e7d1c4 100644 +--- a/client/X11/cli/CMakeLists.txt ++++ b/client/X11/cli/CMakeLists.txt +@@ -19,7 +19,19 @@ set(MODULE_NAME "xfreerdp-cli") + set(MODULE_PREFIX "FREERDP_CLIENT_X11") + + set(${MODULE_PREFIX}_SRCS +- xfreerdp.c) ++ xfreerdp.c ++ images.c ++ arguments.c ++ concat.c ++ gui.c ++ node_settings.c ++ rxrandr_broker.c ++ rxrandr.c ++ settings.c ++ db.c ++ address.c ++ monitor.c ++ xrdp.c) + + add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) + set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME "xfreerdp" RUNTIME_OUTPUT_DIRECTORY "..") +diff --git a/client/X11/cli/xfreerdp.c b/client/X11/cli/xfreerdp.c +index 8db4d39..abdf3ca 100644 +--- a/client/X11/cli/xfreerdp.c ++++ b/client/X11/cli/xfreerdp.c +@@ -1,85 +1,24 @@ +-/** +- * FreeRDP: A Remote Desktop Protocol Implementation +- * X11 Client +- * +- * Copyright 2011 Marc-Andre Moreau +- * Copyright 2012 HP Development Company, LLC +- * +- * Licensed under the Apache License, Version 2.0 (the "License"); +- * you may not use this file except in compliance with the License. +- * You may obtain a copy of the License at +- * +- * http://www.apache.org/licenses/LICENSE-2.0 +- * +- * Unless required by applicable law or agreed to in writing, software +- * distributed under the License is distributed on an "AS IS" BASIS, +- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +- * See the License for the specific language governing permissions and +- * limitations under the License. +- */ ++#include ++#include "gui.h" ++#include "arguments.h" + +-#ifdef HAVE_CONFIG_H +-#include "config.h" +-#endif ++#include + +-#include +-#include +-#include +- +-#include +-#include +- +-#include "../xf_client.h" +-#include "../xfreerdp.h" +- +-int main(int argc, char* argv[]) ++int main(int argc, char **argv) + { +- int rc = 1; +- int status; +- HANDLE thread; +- xfContext* xfc; +- DWORD dwExitCode; +- rdpContext* context; +- rdpSettings* settings; +- RDP_CLIENT_ENTRY_POINTS clientEntryPoints; +- +- ZeroMemory(&clientEntryPoints, sizeof(RDP_CLIENT_ENTRY_POINTS)); +- clientEntryPoints.Size = sizeof(RDP_CLIENT_ENTRY_POINTS); +- clientEntryPoints.Version = RDP_CLIENT_INTERFACE_VERSION; +- +- RdpClientEntry(&clientEntryPoints); +- +- context = freerdp_client_context_new(&clientEntryPoints); +- if (!context) +- return 1; +- +- settings = context->settings; +- xfc = (xfContext*)context; +- +- status = freerdp_client_settings_parse_command_line(context->settings, argc, argv, FALSE); +- if (status) +- { +- rc = freerdp_client_settings_command_line_status_print(settings, status, argc, argv); +- +- if (settings->ListMonitors) +- xf_list_monitors(xfc); +- +- goto out; +- } +- +- if (freerdp_client_start(context) != 0) +- goto out; ++ if (argc > 1) ++ settingsLoad(argv[1]); ++ else ++ settingsLoad("/etc/freerdp/freerdp.db"); + +- thread = freerdp_client_get_thread(context); ++ IupOpen(&argc, &argv); + +- WaitForSingleObject(thread, INFINITE); +- GetExitCodeThread(thread, &dwExitCode); +- rc = xf_exit_code_from_disconnect_reason(dwExitCode); ++ IupShowXY(guiStart(), IUP_CENTER, IUP_CENTER); ++ IupMainLoop(); + +- freerdp_client_stop(context); ++ IupClose(); + +-out: +- freerdp_client_context_free(context); ++ settingsFree(); + +- return rc; ++ return EXIT_SUCCESS; + } diff --git a/sqlite3.a b/sqlite3/sqlite3.a similarity index 100% rename from sqlite3.a rename to sqlite3/sqlite3.a diff --git a/sqlite3.h b/sqlite3/sqlite3.h similarity index 100% rename from sqlite3.h rename to sqlite3/sqlite3.h diff --git a/xfreerdp.c b/xfreerdp.c deleted file mode 100644 index abdf3ca..0000000 --- a/xfreerdp.c +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include "gui.h" -#include "arguments.h" - -#include - -int main(int argc, char **argv) -{ - if (argc > 1) - settingsLoad(argv[1]); - else - settingsLoad("/etc/freerdp/freerdp.db"); - - IupOpen(&argc, &argv); - - IupShowXY(guiStart(), IUP_CENTER, IUP_CENTER); - IupMainLoop(); - - IupClose(); - - settingsFree(); - - return EXIT_SUCCESS; -} diff --git a/xrandr.patch b/xrandr.patch new file mode 100644 index 0000000..ca1a428 --- /dev/null +++ b/xrandr.patch @@ -0,0 +1,13 @@ +diff --git a/cmake/FindXRandR.cmake b/cmake/FindXRandR.cmake +index 7b0ec71..4b2a79e 100644 +--- a/cmake/FindXRandR.cmake ++++ b/cmake/FindXRandR.cmake +@@ -38,7 +38,7 @@ find_library(XRANDR_LIBRARY NAMES Xrandr + ) + + include(FindPackageHandleStandardArgs) +-FIND_PACKAGE_HANDLE_STANDARD_ARGS(XRANDR DEFAULT_MSG XRANDR_LIBRARY XRANDR_INCLUDE_DIR) ++FIND_PACKAGE_HANDLE_STANDARD_ARGS(XRandR DEFAULT_MSG XRANDR_LIBRARY XRANDR_INCLUDE_DIR) + + if(XRANDR_FOUND) + set( XRANDR_LIBRARIES ${XRANDR_LIBRARY} ) diff --git a/xrdp.c b/xrdp.c deleted file mode 100644 index 5448459..0000000 --- a/xrdp.c +++ /dev/null @@ -1,71 +0,0 @@ -//#ifdef HAVE_CONFIG_H -//#include "config.h" -//#endif -// -//#include -//#include -//#include -// -//#include -//#include -// -//#include "../xf_client.h" -//#include "../xfreerdp.h" -// -//#include -//#include -//#include -//#include -// -//#include "xrdp.h" -// -//int free_rdp_connect(int argc, char **argv) -//{ -// int rc = 1; -// int status; -// HANDLE thread; -// xfContext *xfc; -// DWORD dwExitCode; -// rdpContext *context; -// rdpSettings *settings; -// RDP_CLIENT_ENTRY_POINTS clientEntryPoints; -// -// ZeroMemory(&clientEntryPoints, sizeof(RDP_CLIENT_ENTRY_POINTS)); -// clientEntryPoints.Size = sizeof(RDP_CLIENT_ENTRY_POINTS); -// clientEntryPoints.Version = RDP_CLIENT_INTERFACE_VERSION; -// -// RdpClientEntry(&clientEntryPoints); -// -// context = freerdp_client_context_new(&clientEntryPoints); -// if (!context) -// return 1; -// -// settings = context->settings; -// xfc = (xfContext*) context; -// -// status = freerdp_client_settings_parse_command_line(context->settings, argc, argv, FALSE); -// if (status) -// { -// rc = freerdp_client_settings_command_line_status_print(settings, status, argc, argv); -// -// if (settings->ListMonitors) -// xf_list_monitors(xfc); -// -// goto out; -// } -// -// if (freerdp_client_start(context) != 0) -// goto out; -// -// thread = freerdp_client_get_thread(context); -// -// WaitForSingleObject(thread, INFINITE); -// GetExitCodeThread(thread, &dwExitCode); -// rc = xf_exit_code_from_disconnect_reason(dwExitCode); -// -// freerdp_client_stop(context); -// -// out: freerdp_client_context_free(context); -// -// return rc; -//}