Topic
dde-dock 显卡切换插件 v1.8 —— 瞎改和重构
Tofloor
poster avatar
忘记、过去
deepin
2020-07-18 20:05
Author
本帖最后由 zty199 于 2020-10-26 02:55 编辑

【10.26】版本更新:1.7.1 -> 1.8
修复之前版本中,切换显卡调用外部脚本时进程阻塞导致 dde-dock 无响应的问题。


虽然之前说不知道还能更新啥了......但是 1003 更新后又逼死强迫症患者,插件被设置了宽度限制,只有日期插件被豁免了 XD (详见大佬 q77190858 的帖子)
大佬的插件要显示的内容多,只能通过改插件识别名称来伪装自己是日期插件,从而不被遮挡。但是呢,我这个又不是啥复杂的玩意儿,就显示一个图标而已,改名称感觉怪怪的。
于是又折腾了一下午,尝试着想让图标跟随高度或者宽度缩放来着,结果一次都没成功......浪费了几个小时之后决定放弃......

转念一想,既然图标太大会被遮住,那就干脆缩小到不会被遮挡就行了呗~于是,就照搬了其他几个系统插件的绘制模式,给缩小的图标套了一个框,算是统一了一下风格吧......只不过 20x20 的图标确实有点小,效果一般。先凑活着看看吧,外观也不是啥重点......



dde-dock-graphics-plugin_1.8.tar.gz

* P.S > 后面主要是想有没有办法能在 CMake 项目里使用 QtLinguistTools 来翻译文本适配语言环境,今天尝试了许久又失败了......notify-send 也还是用外部指令直接执行的,想导入 libnotify-dev 库用代码实现系统通知也失败了......不知道啥时候才能把外部脚本全部抛弃哦......CMakeList.txt 是真的搞不懂......



*如果切换失败导致无法进入图形界面,可以 ctrl + alt + F2 进入 tty2,输入用户名密码登录后执行 /opt/apps/dde-dock-graphics-plugin/files/bin/Rescue.sh 清空配置文件。



原贴地址:https://bbs.deepin.org/post/197280
大佬的仓库地址:https://github.com/mywhat/DDESwitchCard
(去围观大佬啊,点个赞评个分啥的,再 Star 一下~)


对我这种小白来说,论坛大佬 chanforever 写的显卡切换插件是真的牛逼,总比我只会直接用脚本切换显卡方便不少。以前都是把脚本路径放在 .zshrc 里面用 function 调用的,还是不太方便。有了插件就好多了,有点显卡控制面板的感觉了~(虽然现在还是得自己先把显卡驱动装好才行......)

根据大佬的源码,经过了一番研究和改动,去掉了一些不合理的文件放置位置,增加了一个初始化脚本和自动检测配置文件是否存在的功能,打了一个 deb 包放上来给各位勇士试试。(大佬原来的文件摆放位置导致没有办法打包,因为 postinst 脚本执行时是 root 权限,没找到合适的办法放在用户主目录......只能挪走了。)
P.S.请先确保自己正确安装了 N卡闭源驱动 再尝试这个deb包!还有 nvidia-smi 也需要自己安装,毕竟官网的 .run 文件安装和官方源的 nvidia-driver 还是有区别的......

被我叉走的仓库在GitHub上:https://github.com/zty199/dde-dock-switch_graphics_card
                                   码云:https://gitee.com/deepin-opensource/switch-graphics-card






Reply Favorite View the author
All Replies
风吹过的绿洲
deepin
2020-08-15 06:36
#61
https://bbs.deepin.org/post/197367
感谢,已经更新了,现在支持颜色跟随系统主题了......大小的话暂时没改出来,以后有时间再研究看看......
...

嗯嗯,现在显示正常了。
可是我从intel切换到nvidia,注销后仍然是Intel,手动运行脚本却可以切换成功。

脚本内容都执行了吗?

  1. #提示文本
  2. echo '即将切换至NVIDIA显卡,请输入登录密码,回车后会自动注销。在此之前,请保存好当前的工作。'

  3. #获取NVIDIA显卡的BusID
  4. NVIDIA_BusID=`lspci | egrep 'VGA|3D' | grep 'NVIDIA' | cut -d ' ' -f 1 | sed -r 's/0?(.)/\1/' | sed -e 's/:0/:/g' -e 's/\./:/g'`

  5. #写入Xorg配置文件
  6. echo 'Section "Module"
  7.         Load "modesetting"
  8. EndSection
  9. Section "Device"
  10.         Identifier "nvidia"
  11.         Driver "nvidia"
  12.         BusID "PCI:'$NVIDIA_BusID'"      
  13.         Option "AllowEmptyInitialConfiguration"
  14. EndSection' | sudo tee /etc/X11/xorg.conf.d/20-nvidia.conf > /dev/null

  15. #写入LightDM启动脚本
  16. echo '#!/bin/sh
  17. xrandr --setprovideroutputsource modesetting NVIDIA-0
  18. xrandr --auto
  19. xrandr --dpi 96' | sudo tee /etc/lightdm/display_setup.sh > /dev/null

  20. #为启动脚本赋予可执行权限
  21. sudo chmod +x /etc/lightdm/display_setup.sh

  22. #修改LightDM配置文件
  23. sudo sed -i 's$#display-setup-script=$display-setup-script=/etc/lightdm/display_setup.sh$g' /etc/lightdm/lightdm.conf

  24. #写入内核参数,防止撕裂问题
  25. echo 'options nvidia-drm modeset=1' | sudo tee /etc/modprobe.d/nvidia-graphics-drivers.conf > /dev/null

  26. #删除prime的配置
  27. sudo rm /etc/X11/xorg.conf

  28. #重启LightDM服务,注销即可切换
  29. sudo service lightdm restart
Copy the Code
Reply View the author
忘记、过去
deepin
2020-08-15 12:28
#62
https://bbs.deepin.org/post/197367
嗯嗯,现在显示正常了。
可是我从intel切换到nvidia,注销后仍然是Intel,手动运行脚本却可以切换成功。
...

emmmmmm......目测都执行过了,很奇怪,是不是因为你之前用了 jfy_99 大佬的切换脚本,产生的文件不一样所以冲突了?
Reply View the author
风吹过的绿洲
deepin
2020-08-15 15:14
#63
本帖最后由 as763190097 于 2020-8-15 23:37 编辑
https://bbs.deepin.org/post/197367
emmmmmm......目测都执行过了,很奇怪,是不是因为你之前用了 jfy_99 大佬的切换脚本,产生的文件不一样 ...

找到了你的github把脚本下载下来,确实切换不了,可能我电脑不一样,还是咋的。我因为安装nvidia-prime升级了xorg不知道有没有影响。
xorg.conf这个文件和我用的脚本改的不一样

  1. # dde-dock-switch_graphics_card: X configuration file generated by dde-dock-plugins
  2. # dde-dock-switch_graphics_card: version 1.4

  3. Section "ServerLayout"
  4.     Identifier     "Layout0"
  5.     Screen      0  "DGPU" 0 0
  6.     Option         "AllowNVIDIAGPUScreens"
  7. EndSection

  8. Section "Module"
  9.         Load "modesetting"
  10. EndSection

  11. Section "Device"
  12.     Identifier     "GFX0"
  13.     Driver         "modesetting"
  14.     VendorName     "Intel Corporation"
  15.     BusID          "PCI:0:2:0"
  16. EndSection

  17. Section "Device"
  18.     Identifier     "PEGP"
  19.     Driver         "nvidia"
  20.     VendorName     "NVIDIA Corporation"
  21.     BusID          "PCI:1:0:0"
  22. EndSection

  23. Section "Screen"
  24.     Identifier     "IGPU"
  25.     Device         "GFX0"
  26.     DefaultDepth    24
  27.     SubSection     "Display"
  28.         Depth       24
  29.     EndSubSection
  30. EndSection

  31. Section "Screen"
  32.     Identifier     "DGPU"
  33.     Device         "PEGP"
  34.     DefaultDepth    24
  35.     Option         "AllowEmptyInitialConfiguration"
  36.     SubSection     "Display"
  37.         Depth       24
  38.     EndSubSection
  39. EndSection
Copy the Code


我用的只有
  1. Section "Module"
  2.         Load "modesetting"
  3. EndSection
  4. Section "Device"
  5.         Identifier "nvidia"
  6.         Driver "nvidia"
  7.         BusID "PCI:'$NVIDIA_BusID'"      
  8.         Option "AllowEmptyInitialConfiguration"
  9. EndSection
Copy the Code



Reply View the author
风吹过的绿洲
deepin
2020-08-15 16:04
#64
https://bbs.deepin.org/post/197367
emmmmmm......目测都执行过了,很奇怪,是不是因为你之前用了 jfy_99 大佬的切换脚本,产生的文件不一样 ...

用你的配置注释掉Intel设备可以用上独显
  1. # dde-dock-switch_graphics_card: X configuration file generated by dde-dock-plugins
  2. # dde-dock-switch_graphics_card: version 1.4

  3. Section "ServerLayout"
  4.     Identifier     "Layout0"
  5.     Screen      0  "DGPU" 0 0
  6.     Option         "AllowNVIDIAGPUScreens"
  7. EndSection

  8. Section "Module"
  9.         Load "modesetting"
  10. EndSection

  11. #Section "Device"
  12. #    Identifier     "GFX0"
  13. #    Driver         "modesetting"
  14. #    VendorName     "Intel Corporation"
  15. #    BusID          "PCI:0:2:0"
  16. #EndSection

  17. Section "Device"
  18.     Identifier     "PEGP"
  19.     Driver         "nvidia"
  20.     VendorName     "NVIDIA Corporation"
  21.     BusID          "PCI:1:0:0"
  22. EndSection

  23. Section "Screen"
  24.     Identifier     "IGPU"
  25.     Device         "GFX0"
  26.     DefaultDepth    24
  27.     SubSection     "Display"
  28.         Depth       24
  29.     EndSubSection
  30. EndSection

  31. Section "Screen"
  32.     Identifier     "DGPU"
  33.     Device         "PEGP"
  34.     DefaultDepth    24
  35.     Option         "AllowEmptyInitialConfiguration"
  36.     SubSection     "Display"
  37.         Depth       24
  38.     EndSubSection
  39. EndSection
Copy the Code
Reply View the author
风吹过的绿洲
deepin
2020-08-15 16:28
#65
https://bbs.deepin.org/post/197367
emmmmmm......目测都执行过了,很奇怪,是不是因为你之前用了 jfy_99 大佬的切换脚本,产生的文件不一样 ...

自己修改了/opt/durapps/dde-dock-switch_graphics_card/bin/的脚本可以完美切换了。
Initialize.sh 注释掉Intel设备。
Intel.sh修改xorg.conf改为删除xorg.conf
Reply View the author
忘记、过去
deepin
2020-08-15 18:28
#66
https://bbs.deepin.org/post/197367
找到了你的github把脚本下载下来,确实切换不了,可能我电脑不一样,还是咋的。我因为安装nvidia-prime升 ...

说实话有点迷茫……这个配置文件是定义两个显示器,核显和独显分开调用就可以。我当时想整合nvidia-prime的配置文件放进xorg.conf,只需要serverlayout加上alliwnvidiagpu就好了……没考虑之前装过nvidia-prime.deb这个情况……估计这里也有冲突,只能麻烦大佬自己手改了
Reply View the author
安洛
Moderator
2020-08-16 09:20
#67
大佬,用prime-run运行桌面.desktop文件好像有问题,点了什么反应都没有。在终端执行
  1. /usr/bin/prime-run xxx.desktop
Copy the Code

也是不行的。.desktop文件好像不能直接用命令运行。
Reply View the author
忘记、过去
deepin
2020-08-16 09:50
#68
https://bbs.deepin.org/post/197367
大佬,用prime-run运行桌面.desktop文件好像有问题,点了什么反应都没有。在终端执行

也是不行的。.deskto ...

检查一下生成的脚本内容一样吗?

  1. #!/bin/sh
  2. file=$1
  3. if [ "${file##*.}"x = "desktop"x ]
  4. then
  5.     __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia $(cat $file | grep "Exec=" | sed "s/^Exec=//" | sed 's/%.//' | sed "s/^\"//g" | sed "s/\" *$//g" | head -n 1)
  6. else
  7.     __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia $file
  8. fi
Copy the Code


这个是可以运行 .desktop 文件的
Reply View the author
Comments
chenxiex
2020-08-16 10:16
刚刚不是,现在再看一眼是了。可能是没有更新。总之谢谢大佬!
安洛
Moderator
2020-08-25 14:22
#69
825系统更新后,使用显卡切换插件切换显卡,从intel显卡切换到nvidia显卡,桌面壁纸会变回系统默认壁纸;从nvidia显卡切换回intel,桌面壁纸又会恢复回自己设置的壁纸。
Reply View the author
忘记、过去
deepin
2020-08-25 14:33
#70
https://bbs.deepin.org/post/197367
825系统更新后,使用显卡切换插件切换显卡,从intel显卡切换到nvidia显卡,桌面壁纸会变回系统默认壁纸;从 ...

我觉得吧......这个应该是 dde-desktop 的问题?毕竟重启了 lightdm,中间发生了啥咱也不晓得啊
Reply View the author
安洛
Moderator
2020-08-25 14:42
#71
https://bbs.deepin.org/post/197367
我觉得吧......这个应该是 dde-desktop 的问题?毕竟重启了 lightdm,中间发生了啥咱也不晓得啊 ...

感觉好像两张显卡对应了不同的壁纸配置文件一样……
看来要等官方修复了。
Reply View the author
忘记、过去
deepin
2020-08-25 15:05
#72
https://bbs.deepin.org/post/197367
感觉好像两张显卡对应了不同的壁纸配置文件一样……
看来要等官方修复了。 ...

https://bbs.deepin.org/post/200384

看用户反馈来看是 dde-desktop 加载壁纸 的问题,每次注销之后记不住。这个我就没办法了,切换显卡还是要重启图形界面的......
Reply View the author
muihiuwev
deepin
2020-08-25 15:20
#73
8/25 更新后失效,插件提示找不到nvidia显卡驱动,看了一下,内核更新了,是不是内核的祸?
Reply View the author
忘记、过去
deepin
2020-08-25 15:49
#74
https://bbs.deepin.org/post/197367
8/25 更新后失效,插件提示找不到nvidia显卡驱动,看了一下,内核更新了,是不是内核的祸? ...

正常啊,n卡的闭源驱动每次安装都是要写入内核信息的......

sudo apt install nvidia-driver 重装下驱动就好了,版本自己注意
Reply View the author
colorpure
deepin
2020-10-29 01:35
#75
大神,阔不阔以请你指导下我搞下这个显卡啊,我是双显卡,实验了无数次各种黑屏,主要是想使用拓展屏幕,我是小白,比较弱鸡~~~~

目前情况如图,星火的切换插件一点就黑屏,进不去图形界面。实验了无数次找了一个可以切换的脚本但是切换过去之后:1、没有dock栏2、拓展屏亮了,但是鼠标移不过去~~~

我把我目前的情况和使用的脚本贴上来,如果大神你愿意指导我而且方便可以加qq沟通,更加快点,哈哈哈~~~







可以成功切换的脚本,但是屏幕没有dock了,然后鼠标也移动不到副屏上面去~~~
双显卡切换脚本.zip
Reply View the author
colorpure
deepin
2020-10-29 01:50
#76
哇去~~~,刚刚又实验打算截图给你看没有dock和鼠标移动不了的样子的,结果我瞎调整了下主副屏幕顺序,发现可用了~~~~搞了一个多月了,总算好了。。。哇去~~~
by the way~~~这个GTX1060显卡是真的垃圾~~~
如果有人跟我一样的情况,使用星火的状态栏显卡切换插件黑屏的,建议使用上面楼层的切换脚本,可以的~~~
总之,感谢~~~
Reply View the author
mmlmonkey
deepin
2020-10-29 02:54
#77
我可以提需求吗
Reply View the author
忘记、过去
deepin
2020-10-29 10:07
#78

啥需求......如果我能搞出来的话
Reply View the author
忘记、过去
deepin
2020-10-29 10:17
#79
本帖最后由 zty199 于 2020-10-29 18:22 编辑
https://bbs.deepin.org/post/197367
哇去~~~,刚刚又实验打算截图给你看没有dock和鼠标移动不了的样子的,结果我瞎调整了下主副屏幕顺序,发 ...

emmmmmm......这个脚本我记得就是 jfy_99 大佬的脚本吧,插件基本上就是基于大佬的脚本来的,但是修改了一部分东西。

插件是针对双显卡设计的,会在配置文件写入核显设备地址......如果核显屏蔽就会写入错误的文件了,造成黑屏......(因为双显卡要配置 nvidia-prime)大佬原始的脚本没有 prime 相关配置,所以运行切换不会出问题。一开始本来考虑合并配置文件更简洁的,现在看好像反而添麻烦了啊......
建议再检查一下自己的配置,是不是双显卡,笔记本内屏是不是连接到核显。1060 的笔记本真没见过有核显的......除了 3G 版本......
Reply View the author
colorpure
deepin
2020-10-30 06:22
#80
忘记、过去
本帖最后由 zty199 于 2020-10-29 18:22 编辑
https://bbs.deepin.org/post/197367
哇去~~~,刚刚又实验打算截图给你看没有dock和鼠标移动不了的样子的,结果我瞎调整了下主副屏幕顺序,发 ...

emmmmmm......这个脚本我记得就是 jfy_99 大佬的脚本吧,插件基本上就是基于大佬的脚本来的,但是修改了一部分东西。

插件是针对双显卡设计的,会在配置文件写入核显设备地址......如果核显屏蔽就会写入错误的文件了,造成黑屏......(因为双显卡要配置 nvidia-prime)大佬原始的脚本没有 prime 相关配置,所以运行切换不会出问题。一开始本来考虑合并配置文件更简洁的,现在看好像反而添麻烦了啊......
建议再检查一下自己的配置,是不是双显卡,笔记本内屏是不是连接到核显。1060 的笔记本真没见过有核显的......除了 3G 版本......

其实我到现在还没搞懂prime怎么安装,哈哈哈~~因为一直在失败,目前拓展屏使用很正常~~

很nice~~哈哈哈,因为工作需要长期使用双屏幕,这些deepin可以做主力系统了,win10H2更新了之后也很赞~~~

我应该之前的实验应该都是是屏蔽了核显,哈哈哈~~

1、网上教程很多都是屏蔽核显开头的,所以我每次都黑屏了~~

2、我的是双显卡,配置如下:

Reply View the author

4 / 5
To page
Use Markdown Editor
Loading