看这篇就够了——ubuntu扩展屏幕及装显卡驱动后黑屏问题

Posted 桦树无泪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了看这篇就够了——ubuntu扩展屏幕及装显卡驱动后黑屏问题相关的知识,希望对你有一定的参考价值。

1.问题说明

首先说明为什么外接屏幕需要装显卡驱动,显卡由GPU和显存构成,又称为显示适配器,与数据的输出有密切关系。

在ubuntu系统中,外接显示器是用的独立显卡驱动,而内置屏幕用的是集显驱动,也正是因为调用显卡的不同,产生了黑屏幕的现象。也就是说你的电脑不管哪个屏幕会不亮,都是因为独显与集显驱动之间的冲突或不适配。

网上各种各样的方法和讨论十分混杂,这里我将我所遇到的坑记录一下。

2.准备操作

为了避免后面不必要的麻烦,将会采取如下操作

2.1 更换源

1、打开源文件
sudo chmod 666 /etc/apt/sources.list
sudo gedit /etc/apt/sources.list
2、把以下内容复制
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
 
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
3、更新
sudo apt update 
sudo apt upgrade

2.2安装依赖

sudo apt-get update   #更新软件列表
sudo apt-get install g++
sudo apt-get install gcc
sudo apt-get install make
sudo apt-get install build-essential
sudo apt-get install libc6-dev

2.3 禁用nouveau

#打开文件,
sudo gedit /etc/modprobe.d/blacklist.conf  
#在最后添加如下两行:
blacklist nouveau

options nouveau modeset=0

#然后更新设置
sudo update-initramfs -u  
随后输入以下命令,若无输出则成功
lsmod | grep nouveau

2.4 更换图形化界面

更换图像化界面是因为lightdm比gdm3的兼容性大

sudo apt-get install lightdm
sudo dpkg-reconfigure lightdm

3. 驱动安装

          目前网上常见的驱动安装方法有三类,我称之为全自动、半手动和全手动,这一步先将显卡驱动安装上,先不考虑黑屏问题。

3.1全自动

全自动安装是使用ubuntu自带的"软件和更新",安装完成之后重启。

3.2半手动

ubuntu-drivers devices  #查看适合本显卡的驱动
sudo apt-get install nvidia-430

3.3全手动

https://www.nvidia.com/Download/index.aspx?lang=en-us

首先用上面的网站自己选驱动

1.停图形化显示,进入文字命令行
sudo service lightdm stop 

2. 删除已安装的显卡驱动
sudo apt-get remove --purge nvidia*   
切勿使用这句sudo apt-get autoremove

3. 修改显卡驱动文件的权限
sudo chmod  a+x NVIDIA-Linux-x86_64-396.18.run

4. 安装显卡驱动
sudo ./NVIDIA-Linux-x86_64-470.57.02.run -no-x-check -no-nouveau-check -no-opengl-files 
一直按yes,最后一个-X也按yes.如果选择no,内置屏幕正常,但外接屏不能使用。

上面不管那种方法安装完,都需要重启。

4. 黑屏处理

不管使用上面哪种方法,都可能会出现黑屏的现象,左上方有一个小短白线一直在闪,进不到图形化界面。可以输入nvidia-smi测试显卡驱动是否安装成功。

如果身边有外接显示器可以插上试一下,会发现外接显示器是能够正常使用的。这是因为安装显卡驱动后,独立显卡的显示配置把之前的显示配置替换了。这时其实只需要覆盖 /etc/X11/xorg.conf

cd /etc/X11
sudo rm xorg.conf
sudo cp xorg.conf.nvidia-xconfig-original xorg.conf
reboot

这个配置文件重启后,电脑内置屏幕就可以进入图形化界面了,但外接显示屏是不能用的。如果没有外接显示器需求的小伙伴们就可以结束了。

5. 双屏幕

5.1首先查看系统是否能检测到屏幕

如果检测不到需要检查接口驱动问题

xrandr

5.2 查看nvidia-setting设置

sudo apt-get install nvidia-settings
nvidia-settings

若显示中没有出现X server Display Configuration,可能需要考虑重新安装一个驱动。

在配置界面左侧选择“X Server Display Configuration”,然在屏幕右方的“layout”中能看到两个类似显示器的方框,点击方框中有“disable”的方框,再点击“configuration”,选择“TwinView”,点击“确定”,然后点击“Apply”,最后点击“Save to X Configuration file”,点击保存。

5.3 亮度问题

如果顺利的话,会显示出两个屏幕,但会出现亮度无法调节的情况。这是因为亮度的控制是由集成显卡控制的,出现了冲突情况。这时需要重启进入bios中将显卡模式调成独显模式。再进入系统,一切变为正常。

6.总结

总之,整个过程与自己电脑显卡型号,驱动包型号和ubuntu版本都有关系。如果顺利选择一个好的驱动包,什么不需要调整就可以双屏幕显示。一个不适合的显卡驱动,需要花费很大力气才能实现双屏显示。

但是针对只需要电脑内置屏的朋友,只需要把xorg.conf文件覆盖即可。

根据我个人的情况推荐使用ubuntu自带的全自动显卡驱动安装,比较方便,如果一个包不合适,再多试几个其他版本的。博主本人也是是了第三个才成功。

看这篇就够了丨基于Calcite框架的SQL语法扩展探索

Calcite在大数据系统中有着广泛的运用, 比如Apache Flink, Apache Drill等都大量使用了Calcite,理解Calcite的原理可以说已经成为理解大数据系统中SQL访问层实现原理的必备条件之一。

但是不少人在学习Calcite的过程中都发现关于Calcite的实践案例其实很少,本文就将为大家详细介绍如何基于Calcite框架的SQL语法扩展探索使之更符合你的业务需求,以及扩展SQL在数栈产品的应用实践。

Calcite介绍及用途

Calcite介绍

Apache Calcite是一个动态的数据管理框架,本身不涉及任何物理存储信息,而是专注在SQL解析、基于关系代数的查询优化,通过扩展方式来对接底层存储。

目前Apache Calcite被应用在广泛的数据开源系统中,比如Apache Hive、Apache Phoenix、Apache Flink等。

Calcite的用途

Calcite提供了ANSI标准SQL的解析,以及各种SQL 方言,针对来自于不同数据源的复杂SQL,在Calcite中会把SQL解析成SqlNode语法树结构,然后根据得到的语法树转换成自定义Node,通过自定义Node解析获取到表的字段信息、以及表信息、血缘等相关信息。

下图展示了一部分对外提供的接口信息:

sqlparser 解析模块主要提供了以下几种功能 :

• 解析SQL包含的所有表、字段信息

• 解析SQL的udf函数

• 解析SQL的血缘信息,包括表级血缘、字段血缘

• 解析自定义SqlNode

• api服务变量解析替换

SQL语法扩展

了解完Calcite是什么以及用途后,下面为大家分享Calcite SQL语法扩展的相关内容。

SQL语法扩展背景

在 sqlparser 中进行sql解析的场景中,有两种情况需要使用到自定义扩展,一是Calcite不支持的一些语法;二是在一些场景中存在sql中带有$var自定义变量语法。

那么针对上面的这两种情况,Calcite的自定义扩展是如何实现的呢?自定义扩展主要涉及到以下三个文件:

• Parser.jj:Parser.jj是一个Calcite核心的语法和词法文件,基于Apache FreeMaker模版,该模版包含着变量,这些变量在编译时可以被替换

• parserImpl.ftl:提供自定义SQL语句、literals、dataType的实现方法

• config.fmpp:该文件是FMPP的配置文件,提供了SQL语句、literals、dataType的接口扩展入口

Calcite使用javacc作为语法解析器,freemaker作为模版,把parserImpls.ftl、config.fmpp、Parser.jj模版合成最终的语法词法文件,最终通过javacc编译成自定义的解析器源码,整体流程如下图所示:

扩展SQL实现

● 工程目录

● 扩展sql实现案例

支持以下limit相关语法以及数字可以写成$var形式:

-> limit count, limit start count

-> limit count offset start

-> offset start limit count

在原生的Calcite解析是支持limit count语法的,但是由于返回SqlOrderBy对象内部类Operator的unparse方法在SQL输出过程中对原始SQL进行了改写,因此需要使用扩展SQL得到正确的SQL。

下面介绍一个limit offset语法扩展样例,扩展SQL如下:

select id, name from test where id > 3 order by id desc limit 1 offset $offset_val

整体流程如下:

01

Parser.jj 定义$var变量的token词法DOLLAR_VARIABLE:


02

Parser.jj 扩展的变量方法接入,下面方法会在解析到limit、offset关键字后面的一个词时进行调用:


03

Parser.jj limit offset在select语法的核心处理逻辑:

-> 定义变量


主要定义了三个boolean类型的变量,isOffsetLimit表示offset limit 语法,isLimitOffset表示limit offset语法,isOnlyLimit表示limit count、limit start count语法。

-> 定义处理逻辑

-> 返回自定义SqlNode


针对符合上面的三个boolean条件时,使用自定义ExtendSqlOrderBy的扩展类。

04

parserImpl.ftl 定义扩展的SqlNode ExtendDollarVariable:


05

config.fmpp 定义包以及扩展实现类的import:


06

扩展SqlNode实现:

-> 变量实现sqlNode

-> 扩展limit实现类ExtendSqlOrderBy,该类实现了SqlOrderBy,并在此基础扩展了limit的SqlNode,以及isOffsetLimit、isLimitOffset、isOnlyLimit三个boolean标识limit的不同语法


通过上面的这些步骤后,最后解析生成的SqlNode语法树如下所示:

扩展SQL在数栈的应用

目前袋鼠云的底层sqlparser sql解析涉及的子产品应用包括API数据服务离线开发客户数据洞察(标签)实时开发等,虽然大部分针对Calcite的SQL语法扩展相对于上层的产品应用感知不是很明显,但是扩展SQL还是解决了一些痛点,主要如下:

• 逐渐替换底层采用了多种解析工具解析的情况,使维护更简单,减少bug的产生

• 解决一些不支持的语法,避免在上层业务层做处理或者在底层做一些特殊处理

以在API数据服务后续接入的like语法改造为例为大家进行分享,目前的API数据服务中支持like $var语法,在执行测试中通过传递like语法来确定执行的模糊匹配方式,例如%xx、xx%、%xx%。

收到客户提出的优化like语法场景,袋鼠云本着客户第一的原则,这种合理的优化需求是采纳的。SQL支持like%$var、$var%、%$var%,这样在执行测试中就不需要输入%了,目前扩展SQL语法已经支持这种优化的like语法,预计在2023年上半年会接入进去,下面通过API数据服务展示当前like SQL和扩展后的SQL差异:

● 当前like $var处理

-> 生成API

-> 测试执行,模糊匹配需要输入%

● 扩展like %$var%

-> 生成API

-> 测试执行,由于在SQL阶段已经写了模糊匹配方式,因此可以直接输入值

总结规划

相信通过上面的案例后,大家对于Calcite扩展SQL语法的流程应该有了大致的了解,目前在袋鼠云的业务场景中已经扩展了许多语法,在未来还有一些工作需要进行优化:

• 丰富SQL语法,实现不同数据源扩展SQL语法的隔离

• 逐渐通过SQL语法扩展替换掉底层Calcite和druid共同解析的场景,避免维护多套相同的解析,减少线上问题产生

最后如果是初步接触Calcite SQL语法扩展的同学们,建议先熟悉javacc语法。

地址:https://javacc.github.io/javacc/

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szbky

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术qun」,交流最新开源技术信息,qun号码:30537511,项目地址:https://github.com/DTStack

以上是关于看这篇就够了——ubuntu扩展屏幕及装显卡驱动后黑屏问题的主要内容,如果未能解决你的问题,请参考以下文章

必须收藏!MySQL如何不停机维护主从同步?看这篇就够了

干货Chrome插件(扩展)开发全攻略2.6w字,看这篇就够了!

数据团队做什么,看这篇就够了!

硬核Redis总结,看这篇就够了!

MongoDB详解,用心看这篇就够了重点

数据团队做什么,看这篇就够了!