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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/203194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

西南科技大学C++程序设计实验七(继承与派生二)

一、实验目的 1. 掌握多继承程序设计 2. 掌握虚基类编程 3. 拓展学习可视化程序设计中的继承与派生应用 二、实验任务 重点:掌握虚基类的定义与实现,拓展其功能。 阅读分析、完善程序。下面程序(1)与程序(2)分别是没有使用虚基类和使用虚基类的代码,其中A是最上层基…

【IC前端虚拟项目】git和svn项目托管平台的简单使用说明

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 代码托管在gitee平台上&#xff0c;进去后会看到文档目录“MVU芯片前端设计验证虚拟项目”和工程目录“mvu_prj”&#xff0c;可以通过git来下载工程&#xff1a; git clone gitgitee.com:gjm9999/ic_vi…

【二分答案法】寻找峰值

题目&#xff1a;162. 寻找峰值 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 题目分析&#xff1a; &#xff08;1&#xff09;据题知&#xff0c;索引-1、索引n&#xff08;n为数组长度&#xff09;处的元素都默认为无穷小&#xff0c;我们可以在一开始特判…

ESP32 蓝牙音箱无法链接上电脑的解决:此项不起作用,请确保你的蓝牙设备仍可检测到

ESP32 被我加了放大器后通过A2DP链接手机播放一直正常&#xff0c;但是怎么都链接不到电脑&#xff0c;蓝牙设备可以被发现和配对&#xff0c;但是始终无法连接&#xff0c;显示&#xff1a; 此项不起作用&#xff0c;请确保你的蓝牙设备仍可检测到&#xff0c;然后再试一次 …

C++初学者线路图 23年12月

高精度计算 1. 高精度加减法 高精度加减法课程&#xff08;12月1日&#xff5e;12月4日&#xff09;高精度加减法配套程序&#xff08;12月5日&#xff5e;12月6日&#xff09; 2. 高精度乘法 高精度乘法课程&#xff08;12月7日&#xff5e;12月10日&#xff09;高精度乘法…

SLAM算法与工程实践——SLAM基本库的安装与使用(2):OpenCV库

SLAM算法与工程实践系列文章 下面是SLAM算法与工程实践系列文章的总链接&#xff0c;本人发表这个系列的文章链接均收录于此 SLAM算法与工程实践系列文章链接 下面是专栏地址&#xff1a; SLAM算法与工程实践系列专栏 文章目录 SLAM算法与工程实践系列文章SLAM算法与工程实践…

RabbitMQ创建新用户,并给用户添加角色和授权

一、进入容器 1.1 查看运行容器的详细信息 docker ps -a1.2 进入容器命令 docker exec -it 容器ID /bin/bash 或 docker exec -it 容器name bash 1.3 退出容器命令 exit 或者 CtrlQP 二、操作RabbitMQ 2.1 查看用户列表 注:先进入到容器内部 rabbitmqctl list_user…

SQL语言重温

数据库语言重温 笔记背景SQL教程一些最重要的 SQL 命令SQL WHERE 子句SQL AND & OR 运算符SQL ORDER BY 关键字 笔记背景 由于工作需要&#xff0c;现重温简单SQL语言&#xff0c;笔记记录如下。 SQL教程 SQL&#xff08;Structured Query Language:结构化查询语言&…

代码随想Day29 | 491.递增子序列、46.全排列、47.全排列 II

491.递增子序列 本题和 90.子集II 非常像&#xff0c;但又很不一样&#xff0c;很容易掉坑里。 这道题需要考虑的点有&#xff1a; 如何去除同一层已经使用过某数的情况&#xff1a;需要在某一层使用哈希表&#xff0c;来记录状态&#xff0c;实现去重&#xff0c;因为题中规定…

【PyTorch】权重衰减

文章目录 1. 理论介绍2. 实例解析2.1. 实例描述2.2. 代码实现 1. 理论介绍 通过对模型过拟合的思考&#xff0c;人们希望能通过某种工具调整模型复杂度&#xff0c;使其达到一个合适的平衡位置。权重衰减&#xff08;又称 L 2 L_2 L2​正则化&#xff09;通过为损失函数添加惩…

uni-app 微信小程序之加载行政区图

文章目录 1. 实现效果2. 实现步骤 1. 实现效果 2. 实现步骤 使用三方组件 ucharts echarts 高性能跨全端图表组件页面导入引入的三方组件 组件demo代码 <template><view class"qiun-columns"><view class"cu-bar bg-white margin-top-xs"…

【Flink on k8s】- 2 - 简要介绍 Kubernetes

目录 一、Kubernetes 概述 二、历史版本演进 三、相对主要的优劣势 四、Kubernetes 的基本特性

文献阅读:基于改进ConvNext的玉米叶片病害分类

文献阅读&#xff1a;基于改进ConvNext的玉米叶片病害分类 CBAM注意力机制模块&#xff1a; 1&#xff1a;通道注意力模块&#xff0c;对输入进来的特征层分别进行全局平均池化&#xff08;AvgPool&#xff09;和全局最大池化&#xff08;MaxPool&#xff09;&#xff08;两个…

可视化监控云平台/智能监控平台EasyCVR国标设备开启音频没有声音是什么原因?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。GB28181视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存…

ROS-ROS通信机制-参数服务器

文章目录 一、基础理论知识二、C实现三、Python实现 一、基础理论知识 参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器&#xff0c;可以将数据存储在该容器中&#xff0c;被不同的节点调用&#xff0c;当然不同的节点…

多人聊天UDP

服务端 package 多人聊天;import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList;…

零基础小白怎么准备蓝桥杯-蓝桥杯竞赛经验分享

零基础小白怎么准备蓝桥杯-蓝桥杯竞赛经验分享 前言竞赛简介竞赛目的如何备战1.基础学习2.实战训练&#xff08;非常重要&#xff09; 资料分享 前言 博主在蓝桥杯中获得过十四届Java B 组的省一国二&#xff0c;本文为大家介绍一下蓝桥杯并分享一下自己的参赛经验。 竞赛简介…

golang学习笔记——go互斥锁

文章目录 互斥锁&#xff1a; sync.Mutexsync.WaitGroup 计数器例子func (*WaitGroup) Addfunc (*WaitGroup) Donefunc (*WaitGroup) Wait 读写互斥锁参考资料 临界区总是需要通过同步机制进行保护的&#xff0c;否则就会产生竞态条件&#xff0c;导致数据不一致。 互斥锁&…

封装校验-----Vue3+ts项目

登录校验页面 <script setup lang"ts"> import { ref } from vue import { mobileRules, passwordRules } from /utils/rules const mobile ref() const password ref() </script><!-- 表单 --><van-form autocomplete"off">&l…

数位统计DP

数位DP 数位&#xff08;digit&#xff09;指的是一个数字中的每一位。例如&#xff0c;对于整数1234来说&#xff0c;它有四个数位&#xff0c;分别是1、2、3和4。在数位统计 DP 中&#xff0c;我们通常将数字拆解成各个数位&#xff0c;并使用这些数位进行状态定义和转移。通…