2023-12-03-解决libxkbcommon库编译完后图像界面不能使用键盘
layout: post # 使用的布局(不需要改)
title: Ubuntu修复 # 标题
subtitle: 解决libxkbcommon库编译完图形界面不能使用键盘 #副标题
date: 2023-12-03 # 时间
author: BY ThreeStones1029 # 作者
header-img: img/about_bg.jpg #这篇文章标题背景图片
catalog: true # 是否归档
tags: Ubuntu #标签
文章目录
- 一、前言
- 二、(临时解决方案)更换图形界面
- 2.1.安装lightdm图形管理器
- 2.2.切换图形管理器
- 2.3.安装unity桌面
- 2.4.图形界面美化
- 三、问题依旧存在
- 3.1.下载fcitx-qt5
- 3.2.安装extra-cmake-modules
- 3.3.安装libxkbcommon
- 3.4.总结
- 四、最终解决方法
- 五、待解决的问题
- 5.1.新出现的问题
- 5.2.我的解决方案
- 六、参考资料
一、前言
上个礼拜在qt界面不能输入中文,所以按照一些博客编译libfcitxplatforminputcontextplugin.so库,编译完后发现我的qt直接不能使用键盘了,使用键盘就会直接闪退然后,我尝试去重启后我发现我的图形界面直接崩溃,图形界面打不开了,只有左上角一个光标在闪。
二、(临时解决方案)更换图形界面
在不能打开桌面后,我尝试了很多办法,在stackoverflow,github、ubuntu官网都没有找到解决方案。不得已我当务之急是想恢复我的桌面,所以我安装了unity桌面,同时更换了lightdm图形管理器,才恢复我的图形界面。
2.1.安装lightdm图形管理器
sudo apt-get install lightdm
2.2.切换图形管理器
sudo dpkg-reconfigure lightdm
运行完后会需要选择图形管理器,选择lightdm,选择完后可以使用
cat /etc/x11/default-display-manager
查看当前图形管理器,是否切换成功
2.3.安装unity桌面
sudo apt-get install unity
然后重启就会能进图形管理器了。
2.4.图形界面美化
如果觉得图形界面不好看,可以安装unity-tweak-tools
sudo apt-get install unity-tweak-tools
打开命令
unity-tweak-tools
如果报错schema com.canonical.Unity.ApplicationsLens not installed
需要安装unity-lens-applications、unity-lens-files
sudo apt-get install unity-lens-applications
sudo apt-get install unity-lens-files
安装完可以选用主题等
三、问题依旧存在
虽然有了图形界面,但我依旧发现qt不能使用键盘,同时发现我的cmake、slicer都不能使用键盘了,只要键盘有输入就会闪退。
问题似乎更严重了,我重新回忆了当时的安装过程。由于已经过去了一周,所以可能有遗漏,当时我的编译安装过程如下:
3.1.下载fcitx-qt5
然后解压后在根目录新建build
cd /build
cmake ..
make
make install
3.2.安装extra-cmake-modules
CMake Error at CMakeLists.txt:49 (find_package):By not providing "FindFcitx5Utils.cmake" in CMAKE_MODULE_PATH this projecthas asked CMake to find a package configuration file provided by"Fcitx5Utils", but CMake did not find one.Could not find a package configuration file provided by "Fcitx5Utils"(requested version 5.0.16) with any of the following names:Fcitx5UtilsConfig.cmakefcitx5utils-config.cmakeAdd the installation prefix of "Fcitx5Utils" to CMAKE_PREFIX_PATH or set"Fcitx5Utils_DIR" to a directory containing one of the above files. If"Fcitx5Utils" provides a separate development package or SDK, be sure ithas been installed.-- Configuring incomplete, errors occurred!
查找后发现需要安装extra-cmake-modules
所以下载extra-cmake-modules_1.4.0.orig.tar.xz,和上面一样安装
cmake .
make
make install
发现报错
[ 50%] sphinx-build html: see /home/jjf/Downloads/extra-cmake-modules_1.4.0.orig/extra-cmake-modules-1.4.0/docs/build-html.log
Traceback (most recent call last):File "/home/jjf/anaconda3/bin/sphinx-build", line 7, in <module>from sphinx.cmd.build import main
ModuleNotFoundError: No module named 'sphinx'
make[2]: *** [docs/CMakeFiles/documentation.dir/build.make:62: docs/doc_format_html] Error 1
make[1]: *** [CMakeFiles/Makefile2:175: docs/CMakeFiles/documentation.dir/all] Error 2
make: *** [Makefile:163: all] Error 2Extension error:
Could not import extension ecm (exception: cannot import name 'htmlescape' from 'sphinx.util.pycompat' (/home/jjf/anaconda3/lib/python3.7/site-packages/sphinx/util/pycompat.py))
make[2]: *** [docs/CMakeFiles/documentation.dir/build.make:62: docs/doc_format_html] Error 2
make[1]: *** [CMakeFiles/Makefile2:175: docs/CMakeFiles/documentation.dir/all] Error 2
make: *** [Makefile:163: all] Error 2
然后按照这个链接解决完这个报错
https://github.com/KDE/extra-cmake-modules/commit/001f901ee297bb5346729a02e8920b7528e20717
3.3.安装libxkbcommon
继续重新编译fcitx-qt5发现报错
“Could NOT find XKBCommon_XKBCommon (missing: XKBCommon_XKBCommon_LIBRARY XKBCommon_XKBCommon_INCLUDE_DIR) (found version "")”
这时需要安装libxkbcommon库,我安装的是libxkbcommon0.5.0
./configure --disable-x11
make
sudo make install
重点注意:在我安装完libxkbcommon0.5.0,但这是我图形界面崩溃埋的伏笔
重新编译发现,我的fcitx-qt5编译成功
-- The following OPTIONAL packages have been found:* PkgConfig-- The following REQUIRED packages have been found:* ECM (required version >= 1.4.0)* XKBCommon (required version >= 0.5.0), Keyboard handling library using XKB data, <http://xkbcommon.org>* Qt5DBus* Qt5Widgets* Qt5Concurrent* Qt5 (required version >= 5.1.0)* Qt5Gui (required version >= 5.1.0)* Qt5Core-- Configuring done
-- Generating done
-- Build files have been written to: /home/jjf/Downloads/fcitx-qt5/build
(base) jjf@jjf-Precision-Tower-7810:~/Downloads/fcitx-qt5/build$ make
Scanning dependencies of target fcitxplatforminputcontextplugin_autogen
[ 4%] Automatic MOC for target fcitxplatforminputcontextplugin
[ 4%] Built target fcitxplatforminputcontextplugin_autogen
[ 9%] Generating inputmethod1proxy.cpp, inputmethod1proxy.h
[ 14%] Generating inputcontextproxy.cpp, inputcontextproxy.h
[ 19%] Generating inputcontextproxy.moc
[ 23%] Generating inputcontext1proxy.cpp, inputcontext1proxy.h
[ 28%] Generating inputcontext1proxy.moc
[ 33%] Generating inputmethodproxy.cpp, inputmethodproxy.h
[ 38%] Generating inputmethodproxy.moc
[ 42%] Generating inputmethod1proxy.moc
Scanning dependencies of target fcitxplatforminputcontextplugin
[ 47%] Building CXX object qt5/platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin.dir/fcitxplatforminputcontextplugin_autogen/mocs_compilation.cpp.o
[ 52%] Building CXX object qt5/platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin.dir/fcitxinputcontextproxy.cpp.o
[ 57%] Building CXX object qt5/platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin.dir/fcitxqtdbustypes.cpp.o
[ 61%] Building CXX object qt5/platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin.dir/fcitxwatcher.cpp.o
[ 66%] Building CXX object qt5/platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin.dir/qfcitxplatforminputcontext.cpp.o
[ 71%] Building CXX object qt5/platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin.dir/main.cpp.o
[ 76%] Building CXX object qt5/platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin.dir/qtkey.cpp.o
[ 80%] Building CXX object qt5/platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin.dir/inputcontextproxy.cpp.o
[ 85%] Building CXX object qt5/platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin.dir/inputcontext1proxy.cpp.o
[ 90%] Building CXX object qt5/platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin.dir/inputmethodproxy.cpp.o
[ 95%] Building CXX object qt5/platforminputcontext/CMakeFiles/fcitxplatforminputcontextplugin.dir/inputmethod1proxy.cpp.o
[100%] Linking CXX shared module libfcitxplatforminputcontextplugin.so
[100%] Built target fcitxplatforminputcontextplugin
(base) jjf@jjf-Precision-Tower-7810:~/Downloads/fcitx-qt5/build$ sudo make install
[sudo] password for jjf:
[ 4%] Automatic MOC for target fcitxplatforminputcontextplugin
[ 4%] Built target fcitxplatforminputcontextplugin_autogen
[100%] Built target fcitxplatforminputcontextplugin
Install the project...
-- Install configuration: ""
-- Installing: /opt/Qt5.14.2/5.14.2/gcc_64/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so
-- Set runtime path of "/opt/Qt5.14.2/5.14.2/gcc_64/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so" to ""
然而我加入了对应的libfcitxplatforminputcontextplugin.so库后,发现我的qt直接闪退。然后我去掉libfcitxplatforminputcontextplugin.so库,也没有效果。然后我重启了!!!,就是因为这一重启,我图形界面直接进不去了,图形界面直接崩溃。
我查看了系统日志
tail -f /var/log/syslog
发现了这一条:
segfault at 4 ip 00007fe31c7c5fe8 sp 00007ffdd5ab6480 error 4 in libxkbcommon.so.0.0.0[7fe31c7ad000+1b000]
这期间让我注意到libxkbcommon.so.0.0.0正是我前面编译过的库,所以我确定就是因为我编译了libxkbcommon导致图形界面崩溃。
3.4.总结
以上大体就是我的libfcitxplatforminputcontextplugin.so库编译安装过程,可能由于时间原因,我很难复现,但大体是这样的。期间第一个错误就是编译了libxkbcommon库,其次就是重启了。
四、最终解决方法
前面提到我临时安装了unity的桌面以及ibus的输入法(因为在拯救过程中卸载了fcitx)暂时解决桌面图形界面的问题。但还是qt、cmake、slicer都不能使用键盘。qt、cmake重新安装都没有解决闪退问题。
我昨天上午尝试回忆了当天libfcitxplatforminputcontextplugin.so库的编译过程,思来想起觉得最大的错误是编译的libxkbcommon库版本不对,导致与我的系统冲突(ubuntu20.04)。
所以我重新下载安装了libxkbcommon0.8.4,编译完成libxkbcommon发现我的qt以及cmake,slicer都可以使用键盘了。我意识到问题可能解决了,然后我尝试把桌面换回来。
果不其然,桌面可以使用默认桌面了,gdm3图形管理器也可以使用了。
我有在libxkbcommon的官方github上提过这个问题,但是似乎没有人遇到过。
https://github.com/xkbcommon/libxkbcommon/issues/412
五、待解决的问题
5.1.新出现的问题
但是,一波三折,虽然默认桌面可以使用,qt、cmake等软件可以使用键盘了。但我很快发现了我的键盘的super键一直处于按下的状态,不能正常的输入。数字键直接变成快捷键了,我很快意识到仿佛输入法按键被交换了,super键需要一直按着才能正常输入。
我在stackoverflow,github,ubuntu官网都没有找到解决方法,期间看到类似的问题,ubuntu官网上有人说可以在gnome-tweaks的dash to panel里面修改,安装这个工具后但是我发现我的设置是正常的,没有设置错误热键。[gnome - Number keys switching applications (Ubuntu 21.10) - Ask Ubuntu],这种方法对我无效。
5.2.我的解决方案
我尝试将默认输入法替换为了ibus输入法(因为默认桌面似乎默认使用fcitx输入法),同时替换了默认桌面为unity的桌面。然后惊奇的发现可以使用键盘了,super键不再被默认按着。
但是在默认桌面下不管怎么样,我的键盘super仿佛被一支无形的手按着。
感觉还是因为输入法的原因导致键盘热键冲突,但目前使用unity桌面+ibus输入法能够满足我的需求,所以我没有深究下去,如果后续有了更好的解决方案,我会及时更新的。
六、参考资料
有些资料和博客因为没有及时记录下来,以下是我目前记得的一些
1.解决Ubuntu下安装Qt5.8无法输入中文的问题
2.ModuleNotFoundError: No module named ‘sphinx’
3.extra-cmake-modules_1.4.0.orig.tar.xz
4.xkbcommon官网
5.我在xkbcommon的github提的issue
6.ubuntu官网提到的解决super按键方法
7.fcitx-qt5官网
8.ubuntu 20.04安装 unity-tweak-tools 启动时遇到错误
9.查看与切换Ubuntu显示管理器
10.Ubuntu进不去图形化界面的解决方案
11.Ubuntu开机没有图形界面 进入tty的拯救方法
也可以到我的个人博客查看,有时会来不及同步更新到CSDN
相关文章:

2023-12-03-解决libxkbcommon库编译完后图像界面不能使用键盘
layout: post # 使用的布局(不需要改) title: Ubuntu修复 # 标题 subtitle: 解决libxkbcommon库编译完图形界面不能使用键盘 #副标题 date: 2023-12-03 # 时间 author: BY ThreeStones1029 # 作者 header-img: img/about_bg.jpg #这篇文章标题背景图片 c…...

vue el-table表格中每行上传文件(上传简历)操作
1、HTML中 <el-table :data"formInfo.userListDto" border stripe max-height"400"><el-table-column type"index" label"序号" width"50"> </el-table-column><el-table-column prop"realName&q…...

Python批量图像处理--图片重命名、图片旋转
图像批量重命名: 使用batch_rename_images函数实现对多个文件夹下面的图片进行重命名操作 先检查文件名的后缀,使用了.endswith()方法来判断文件名是否以.jpg、.png或.JPG结尾,判断是否为图片文件 然后构造新的文件路径new_filepath&#…...

第五天 用Python批量处理Excel文件,实现自动化办公
用Python批量处理Excel文件,实现自动化办公 一、具体需求 有以下N个表,每个表的结构一样,如下: 需要把所有表数据汇总,把每个人的得分、积分分别加起来,然后按总积分排名,总积分一致时ÿ…...

mybatis整合(手动添加jar包方式)
操作步骤 创建数据库 建立user表 放入数据 1、创建javaweb工程并添加Jar包 用到的jar包 junit 用于测试 mybatis框架:mybatis-3.5.9.jar mysql数据库:mysql-connector-java-8.0.28.jar 2、添加MyBatis核心配置文件 <?xml version"1.0"…...

leetcode - 矩阵区域和
1314. 矩阵区域和 - 力扣(LeetCode) 给你一个 m x n 的矩阵 mat 和一个整数 k ,请你返回一个矩阵 answer ,其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和: i - k < r < i k, j - k < c …...

头歌JUnit单元测试相关实验进阶
JUnit是一个由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework),主要供 Java 开发人员编写单元测试。Junit在极限编程和重构中被极力推荐使用,因为它可以大大地提高开发的效率。 Junit的特性&…...

【kafka实践】11|消费位移提交
消费者位移 消费者位移这一节介绍了消费者位移的基本概念和消息格式,本节我们来聊聊消费位移的提交。 Consumer 需要向 Kafka 汇报自己的位移数据,这个汇报过程被称为提交位移(Committing Offsets)。因为 Consumer 能够同时消费…...

Mac卸载、安装Python
卸载 说明 对于删除 Python,我们首先要知道其具体都安装了什么,实际上,在安装 Python 时,其自动生成: Python framework,即 Python 框架;Python 应用目录;指向 Python 的连接。 …...

算法——滑动窗口
滑动窗口大致分为两类:一类是窗口长度固定的,即left和right可以一起移动;另一种是窗口的长度变化(例如前五道题),即right疯狂移动,left没怎么动,这类题需要观察单调性(即指针)等各方…...

带头双向循环链表:一种高效的数据结构
💓 博客主页:江池俊的博客⏩ 收录专栏:数据结构探索👉专栏推荐:✅cpolar ✅C语言进阶之路💻代码仓库:江池俊的代码仓库🔥编译环境:Visual Studio 2022🎉欢迎大…...

C++基础 -34- 输入输出运算符重载
输出运算符重载格式 ostream & operator<<(ostream &out,person a) {cout << a.a << endl;return out; }举例输出运算符重载 #include "iostream"using namespace std;class person {public:person(int a):a(a){}int a; };ostream &…...

MimicGen论文分析与资料汇总
MimicGen论文分析与资料汇总 前言论文分析相关资料汇总 前言 论文分析 相关资料汇总 Paper:MimicGen: A Data Generation System for Scalable Robot Learning using Human Demonstrations mimicgen.github 破局利刃!英伟达合成数据新成果:为机器人造…...

JAVA-每一页PDF转图片
结论:1、iText几乎找不到如何PDF转图片的信息,但能找到获取到PDF里面的图片并保存下来的信息;2、PDF box满大街都是参考代码(下面会附上一个作为参考);3、收费的库使用起来更简单,但就是要收费&…...

VS安装QT VS Tools编译无法通过
场景: 项目拷贝到虚拟机内部后,配置好相关环境后无法编译,安装QT VS Tools后依旧无法编译,查找资料网上说的是QT工具版本不一致导致的,但反复试了几个版本后依旧无法编译通过。错误信息如下: C:\Users\Ad…...

【C语言之 CJson】学CJson看这一篇就够了
文章目录 前言一、下载CJson二、创建一个json2.1 创建json对象cJSON类型详解 2.2 创建键值对2.3 添加嵌套的 JSON 对象2.4 添加数组创建数组添加元素到数组添加数组到obj 2.5 将 JSON 对象转为字符串2.6 释放内存2.7 示例代码 三、解析json3.1 解析json root3.2 把一个key解析出…...

使用Java语言实现字母之间的大小写转换
这个类的作用为实现字母之间的大小写转换,通过加减32来完成。 输入的代码 import java.util.Scanner; public class WordChangeDemo {public static void main(String[] args){try (Scanner in new Scanner(System.in)) {System.out.println("请输入您要进…...

Docker的数据持久化;Docker网络;Dockerfile编写
Docker的数据持久化;Docker网络;Dockerfile编写; 文章目录 Docker的数据持久化;Docker网络;Dockerfile编写;**Docker的数据持久化**1)将本地目录映射到容器里2)数据卷3)将…...

OpenHarmony亮相MTSC 2023 | 质量效率共进,赋能应用生态发展
11月25日,MTSC 2023第十二届中国互联网测试开发大会在深圳登喜路国际大酒店圆满举行。大会以“软件质量保障体系和测试研发技术交流”为主要目的,旨在为行业搭建一个深入探讨和交流的桥梁和平台。OpenAtom OpenHarmony(简称“OpenHarmony”&a…...

windows11 调整鼠标灵敏度方法
首先 我们打开电脑设置 或者在 此电脑/此计算机/我的电脑 右击选择属性 然后 有的电脑 左侧菜单中 直接就有 设备 然后在设备中直接就可以找到 鼠标 选项 调整光标速度即可 如果操作系统和我的一样 可以直接搜索鼠标 然后 选择 鼠标设置 然后 调整上面的鼠标指针速度即可...

贪心算法个人见解
目录 基本思想: 贪心算法的步骤: 示例: 贪心算法(Greedy Algorithm)是一种基于贪心策略的算法范式,它在每一步选择中都采取当前状态下的最优选择,而不考虑全局最优解。贪心算法通常适用于那些…...

Win中Redis部署与配置
1.下载msi版本 下载传送门 2.双击next-->next安装安装 3.密码配置以及开机自启 在配置文件中配置相应配置进行配置密码以及端口和ip port 6379指定 Redis 监听端口,默认端口为 6379,作者在自己的一篇博文中解释了为什么选用 6379 作为默认端口&…...

vue el-button 封装及使用
使用了 Element UI 中的 el-button 组件,并对其进行了封装和定制。 创建组件index.vue (src/common-ui/button/index.vue) <template><el-buttonclass"h-button":type"type":icon"hIcon":disabled"disabled"clic…...

QT之QMediaPlayer的用法
QT之QMediaPlayer的用法 成员函数例程 成员函数 1)setMedia(const QMediaContent &media, QIODevice *stream nullptr) 设置要播放的媒体内容,其中参数media指定了媒体内容,stream参数指定了用于读取媒体的输入设备(如文件流࿰…...

TCP_报文格式解读
报文格式 header部分字段含义解析 固定字段 对于header中固定部分字段含义,见之前的blog《TCP报文分析》; 对部分字段含义补充说明 Data Offset:4bit,tcp header的长度,单位:32bit(4字节&…...

C语言面试之旅:掌握基础,探索深度(面试实战之c语言关键词下篇)
一.枚举( enum) 枚举是 C 语言中的一种基本数据类型,用于定义一组具有离散值的常量,它可以让数据更简洁,更易读。枚举类型通常用于为程序中的一组相关的常量取名字,以便于程序的可读性和维护性。定义一个枚…...

Java学习第十三天
Java多态 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作 多态性是对象多种表现形式的体现。 多态的优点 1. 消除类型之间的耦合关系2. 可替换性3. 可扩充性4. 接口性5. 灵活性6. 简化性 多态存在的三个…...

【Delphi】实现彩色日志显示框(TRichEdit Helper)
目录 一、前言 二、实现方法 1. 第一步 2. 第二步 3. 第三步 三、主程序代码 四、下载 1. 可执行程序 2. 程序源代码 一、前言 在用Delphi做日常开发的时候,经常需要显示程序运行的日志,一般我们会使用TMemo,使用起来简单,…...

Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!
1、背景 集群配置为:8 个 node 节点,16 核 32G,索引 4 分片 1 副本。应用程序的查询逻辑是按经纬度排序后找前 200 条文档。 1、应用对查询要求比较高,search 没有慢查询的状态。 2、集群压测性能不能上去,cpu 使用未打…...

图像批量设计软件Retrobatch Pro mac中文版功能特色
Retrobatch Mac是一款灵活的批量图像处理工具。用户可以自由创建Workflow来实现相应的功能,这些Workflow能取代大量的重复劳动,提高生产力。Retrobatch Mac的一般操作是从左边栏拖动相应动作到工作区形成节点(Nodes),节…...