fcitx5 Pyside6/PyQt6 无法中文输入问题解决
sean 编辑于2024-11-26 18:43软件相关
linux下程序,无法使用fcitx输入法输入中文,但发现切换ibus后可以输入。后来发现是pyside6/pyqt6自带支持ibus的so库,而没有fcitx5的so库。
libfcitx5platforminputcontextplugin.so这个库对应fcitx5-qt(https://github.com/fcitx/fcitx5-qt)的源码文件构建出来的。
目前我的系统是debian11, fcitx5版本是5.0.5.1, 我要构建的pyside6/pyqt6版本是6.3.2
ubuntu2204,fcitx5版本是5.0.14,
这里是我编译好debian11的动态库文件下载地址:libfcitx5platforminputcontextplugin.so
一、版本确定后可以开始配置fcitx5-qt(当前版本是5.0.16)
git clone https://github.com/fcitx/fcitx5-qt
参考网上的文章,说要先构建qt6
二.构建Qt6库
先下载qt6.3.2源码包
$ wget -c https://download.qt.io/official_releases/qt/6.3/6.3.2/single/qt-everywhere-src-6.3.2.tar.xz
或
$ wget -c https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/6.3/6.3.2/single/qt-everywhere-src-6.3.2.tar.xz
安装前置依赖包
sudo apt install cmake extra-cmake-modules libxkbcommon-x11-dev libxcb-cursor0 python3-dev portaudio19-dev patchelf build-essential mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev libgles2-mesa-dev
#在6.6.1里要求
sudo apt install libclang-dev libclang-14-dev
安装Qt6库,
解压,build, 安装qt6库,
配置预安装到 /opt/qt6 目录下,主要是编译用完方便删除,
--parallel 指定4, 不然占满所有cpu资源,导致死机,我是四核cpu仅供参考,这里有一个取巧的方法,因为只是需要编译fcitx5插件,只需要加上--target qtbase编译基本库 就可以
qt6库安装完,就可以之构建fcitx5-qt了。
三、构建fcitx5-qt
1、在开始之前先安装fcitx5开发依赖包
$ sudo apt install libfcitx5utils-dev
2、进入刚才步骤一里checkout的fcitx5-qt目录,配置下根目录下的文件CMakeLists.txt
$ cd fcitx5-qt
#改成如下的形式
$ nano -w ./CMakeLists.txt
cmake_minimum_required(VERSION 3.6.0)
project(fcitx5-qt VERSION 5.0.5)
set(FCITX5_QT_VERSION ${PROJECT_VERSION})
set(REQUIRED_QT4_VERSION 4.8.0)
set(REQUIRED_QT5_VERSION 5.1.0)
set(REQUIRED_QT6_VERSION 6.0.0)
find_package(ECM 1.4.0 REQUIRED)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
option(ENABLE_QT4 "Enable Qt 4" Off)
option(ENABLE_QT5 "Enable Qt 5" Off)
option(ENABLE_QT6 "Enable Qt 6" On)
option(BUILD_ONLY_PLUGIN "Build only plugin" On)
option(BUILD_STATIC_PLUGIN "Build plugin as static" Off)
option(WITH_FCITX_PLUGIN_NAME "Enable plugin name with fcitx" On)
if (BUILD_ONLY_PLUGIN)
set(LIBRARY_TYPE STATIC)
set(LIBRARY_COMPILE_FLAGS "-fPIC")
else()
set(LIBRARY_TYPE SHARED)
add_definitions(-DFCITX_GETTEXT_DOMAIN=\"fcitx5-qt\")
endif()
if (BUILD_ONLY_PLUGIN AND BUILD_STATIC_PLUGIN)
set(PLUGIN_LIBRARY_TYPE STATIC)
else()
set(PLUGIN_LIBRARY_TYPE MODULE)
endif()
add_definitions(-DFCITX5_QT_VERSION=\"${FCITX5_QT_VERSION}\" -DQT_NO_KEYWORDS)
include(GNUInstallDirs)
include(FeatureSummary)
include(GenerateExportHeader)
include(ECMSetupVersion)
include(ECMGenerateHeaders)
include(ECMUninstallTarget)
find_package(XCB REQUIRED COMPONENTS XCB)
find_package(XKBCommon 0.5.0 REQUIRED COMPONENTS XKBCommon)
if (NOT BUILD_ONLY_PLUGIN)
find_package(Fcitx5Utils REQUIRED)
endif()
find_package(X11 REQUIRED)
add_library(X11Import UNKNOWN IMPORTED)
set_target_properties(X11Import PROPERTIES
IMPORTED_LOCATION "${X11_X11_LIB}"
INTERFACE_INCLUDE_DIRECTORIES "${X11_X11_INCLUDE_PATH}")
if (BUILD_ONLY_PLUGIN)
# Dup a little bit option here.
include(CompilerSettings)
else()
include("${FCITX_INSTALL_CMAKECONFIG_DIR}/Fcitx5Utils/Fcitx5CompilerSettings.cmake")
endif()
set(Fcitx5Qt6_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}/Fcitx5Qt6)
set(Fcitx5Qt5_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}/Fcitx5Qt5)
set(Fcitx5Qt4_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}/Fcitx5Qt4)
if(ENABLE_QT4)
find_package(Qt4 ${REQUIRED_QT4_VERSION} REQUIRED)
add_subdirectory(qt4)
endif()
if(ENABLE_QT5)
find_package(Qt5 ${REQUIRED_QT5_VERSION} CONFIG REQUIRED Core DBus Widgets)
find_package(Qt5Gui ${REQUIRED_QT5_VERSION} REQUIRED Private)
add_subdirectory(qt5)
endif()
if(ENABLE_QT6)
find_package(Qt6 ${REQUIRED_QT6_VERSION} CONFIG REQUIRED Core DBus)
find_package(Qt6Gui ${REQUIRED_QT6_VERSION} REQUIRED Private)
add_subdirectory(qt6)
endif()
if(NOT BUILD_ONLY_PLUGIN)
find_package(Gettext REQUIRED)
add_subdirectory(po)
endif()
enable_testing()
add_subdirectory(test)
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
这里主要是这几个地方要改,
option(ENABLE_QT4 "Enable Qt 4" Off)
option(ENABLE_QT5 "Enable Qt 5" Off)
option(ENABLE_QT6 "Enable Qt 6" On)
option(BUILD_ONLY_PLUGIN "Build only plugin" On)
option(BUILD_STATIC_PLUGIN "Build plugin as static" Off)
option(WITH_FCITX_PLUGIN_NAME "Enable plugin name with fcitx" On)
- 只编译qt6
- 只生成插件
- 不需要编译成静态插件
- 插件名字不要改动,保持开启。
3、然后要记得配置环境变量CMAKE_PREFIX_PATH让编译程序能够找到qt6库,这个地址就是步骤二里的-prefix指定的预安装地址/opt/qt6
export CMAKE_PREFIX_PATH="/opt/qt6"
4、最后,直接配置,编译,生成:
$ cmake ./
$ cmake --build .
成功后,so文件在程序目录fcitx5-qt/qt6/platforminputcontext/libfcitx5platforminputcontextplugin.so里
$ chmod 755 fcitx5-qt/qt6/platforminputcontext/libfcitx5platforminputcontextplugin.so
设置好执行权限
放到自己的虚拟环境里就ok了比如这样
$ cp fcitx5-qt/qt6/platforminputcontext/libfcitx5platforminputcontextplugin.so /lib/python3.9/site-packages/PyQt6/Qt/plugins/platforminputcontexts/
$ cd /lib/python3.9/site-packages/PyQt6/Qt/plugins/platforminputcontexts/
$ ls
libcomposeplatforminputcontextplugin.so libfcitx5platforminputcontextplugin.so libibusplatforminputcontextplugin.so libqtvirtualkeyboardplugin.so
肥龙软件分享的软件是本站作者开发的免费,无广告,安全可靠,绝不附带任何无关软件,绝不困绑任何插件的实用软件。如果您感觉好用,可以捐赠我们,这样我们可以有更积极的动力去改进升级软件,维持服务器运转,感谢您的捐助,谢谢!