You are not logged in.

#1 2015-08-30 05:00:01

X-san
Member
From: Omaha
Registered: 2015-08-30
Posts: 3

[Solved?] Optimus & libgl - Is this doable?

So my ultimate goal here is to be able to switch between graphics cards by switching sessions in the display manager (kind of like the Ubuntu implimentation of Optimus support).

Using scripts I can unload and switch off the NVIDIA card; however, when starting X with Intel I'm not able to load GLX (obiously, because nvidia-libgl and mesa-libgl can't coexist).

If those two libgl packages are just symbolic links (pretty sure they are), can't I just set the appropriate libraries with somthing like "export libgl_drivers_path" or even create the symlinks myself with the switch scripts?

Is there a better way to impliment libgl switching? Is this even possible without messing with code/packages? Should I give up?

(Not sure if this is the right section. I'm new to the forum, not Arch.)

Last edited by X-san (2015-08-30 11:07:27)

Offline

#2 2015-08-30 09:08:04

X-san
Member
From: Omaha
Registered: 2015-08-30
Posts: 3

Re: [Solved?] Optimus & libgl - Is this doable?

OK, I've taken apart the nvidia-libgl and mesa-libgl packages, and started making a script to swap between the symbolic links. This should work, but it's kind of hacky. If anyone knows of a more elegent way to do this I'm all... eyes.

Offline

#3 2015-08-30 11:06:55

X-san
Member
From: Omaha
Registered: 2015-08-30
Posts: 3

Re: [Solved?] Optimus & libgl - Is this doable?

OK, everything seems to be working. Just have to figure out how to make the Intel graphics stop tearing, and intigrate these scripts into a display manager - then the dream will be complete.

Thanks for the moral support, or somthing like that. Here's the ugly horrendous hack:
intel-switch

 
#!/bin/bash
# Fix X server configs
rm /etc/X11/xorg.conf
rm /home/id3al/.xinitrc
cp /home/id3al/.xinitrc.intel /home/id3al/.xinitrc

# Unload Nvidia Driver
rmmod nvidia

# Signal bbswitch to turn off GPU
tee /proc/acpi/bbswitch <<<OFF

# Remove Nvidia
# x86_64
rm /usr/lib/libEGL.so
rm /usr/lib/libEGL.so.1
rm /usr/lib/libEGL.so.352.41
rm /usr/lib/libGLESv1_CM.so
rm /usr/lib/libGLESv1_CM.so.1
rm /usr/lib/libGLESv1_CM.so.352.41
rm /usr/lib/libGLESv2.so
rm /usr/lib/libGLESv2.so.2
rm /usr/lib/libGLESv2.so.352.41
rm /usr/lib/libGL.so
rm /usr/lib/libGL.so.1
rm /usr/lib/libGL.so.352.41
rm /usr/lib/xorg/modules/extensions/libglx.so
rm /usr/lib/xorg/modules/extensions/libglx.so.1
rm /usr/lib/xorg/modules/extensions/libglx.so.352.41
#i686
rm /usr/lib32/libEGL.so
rm /usr/lib32/libEGL.so.1
rm /usr/lib32/libEGL.so.352.41
rm /usr/lib32/libGLESv1_CM.so
rm /usr/lib32/libGLESv1_CM.so.1
rm /usr/lib32/libGLESv1_CM.so.352.41
rm /usr/lib32/libGLESv2.so
rm /usr/lib32/libGLESv2.so.2
rm /usr/lib32/libGLESv2.so.352.41
rm /usr/lib32/libGL.so
rm /usr/lib32/libGL.so.1
rm /usr/lib32/libGL.so.352.41

# Copy Intel
# x86_64
cp /root/switch/Intel/usr/lib/libEGL.so /usr/lib/libEGL.so
cp /root/switch/Intel/usr/lib/libEGL.so.1 /usr/lib/libEGL.so.1
cp /root/switch/Intel/usr/lib/libEGL.so.1.0.0 /usr/lib/libEGL.so.1.0.0
cp /root/switch/Intel/usr/lib/libGLESv1_CM.so /usr/lib/libGLESv1_CM.so
cp /root/switch/Intel/usr/lib/libGLESv1_CM.so.1 /usr/lib/libGLESv1_CM.so.1
cp /root/switch/Intel/usr/lib/libGLESv1_CM.so.1.1.0 /usr/lib/libGLESv1_CM.so.1.1.0
cp /root/switch/Intel/usr/lib/libGLESv2.so /usr/lib/libGLESv2.so
cp /root/switch/Intel/usr/lib/libGLESv2.so.2 /usr/lib/libGLESv2.so.2
cp /root/switch/Intel/usr/lib/libGLESv2.so.2.0.0 /usr/lib/libGLESv2.so.2.0.0
cp /root/switch/Intel/usr/lib/libGL.so /usr/lib/libGL.so
cp /root/switch/Intel/usr/lib/libGL.so.1 /usr/lib/libGL.so.1
cp /root/switch/Intel/usr/lib/libGL.so.1.2.0 /usr/lib/libGL.so.1.2.0
cp /usr/lib/xorg/modules/extensions/libglx.xorg /usr/lib/xorg/modules/extensions/libglx.so
# i686
cp /root/switch/Intel/usr/lib32/libEGL.so /usr/lib32/libEGL.so
cp /root/switch/Intel/usr/lib32/libEGL.so.1 /usr/lib32/libEGL.so.1
cp /root/switch/Intel/usr/lib32/libEGL.so.1.0.0 /usr/lib32/libEGL.so.1.0.0
cp /root/switch/Intel/usr/lib32/libGLESv1_CM.so /usr/lib32/libGLESv1_CM.so
cp /root/switch/Intel/usr/lib32/libGLESv1_CM.so.1 /usr/lib32/libGLESv1_CM.so.1
cp /root/switch/Intel/usr/lib32/libGLESv1_CM.so.1.1.0 /usr/lib32/libGLESv1_CM.so.1.1.0
cp /root/switch/Intel/usr/lib32/libGLESv2.so /usr/lib32/libGLESv2.so
cp /root/switch/Intel/usr/lib32/libGLESv2.so.2 /usr/lib32/libGLESv2.so.2
cp /root/switch/Intel/usr/lib32/libGLESv2.so.2.0.0 /usr/lib32/libGLESv2.so.2.0.0
cp /root/switch/Intel/usr/lib32/libGL.so /usr/lib32/libGL.so
cp /root/switch/Intel/usr/lib32/libGL.so.1 /usr/lib32/libGL.so.1
cp /root/switch/Intel/usr/lib32/libGL.so.1.2.0 /usr/lib32/libGL.so.1.2.0 

nvidia-switch

#!/bin/bash
# Remove Intel
# x86_64
rm /usr/lib/libEGL.so
rm /usr/lib/libEGL.so.1
rm /usr/lib/libEGL.so.1.0.0
rm /usr/lib/libGLESv1_CM.so
rm /usr/lib/libGLESv1_CM.so.1
rm /usr/lib/libGLESv1_CM.so.1.1.0
rm /usr/lib/libGLESv2.so
rm /usr/lib/libGLESv2.so.2
rm /usr/lib/libGLESv2.so.2.0.0
rm /usr/lib/libGL.so
rm /usr/lib/libGL.so.1
rm /usr/lib/libGL.so.1.2.0
rm /usr/lib/xorg/modules/extensions/libglx.so
# i686
rm /usr/lib32/libEGL.so
rm /usr/lib32/libEGL.so.1
rm /usr/lib32/libEGL.so.1.0.0
rm /usr/lib32/libGLESv1_CM.so
rm /usr/lib32/libGLESv1_CM.so.1
rm /usr/lib32/libGLESv1_CM.so.1.1.0
rm /usr/lib32/libGLESv2.so
rm /usr/lib32/libGLESv2.so.2
rm /usr/lib32/libGLESv2.so.2.0.0
rm /usr/lib32/libGL.so
rm /usr/lib32/libGL.so.1
rm /usr/lib32/libGL.so.1.2.0

# Copy Nvidia
# x86_64
cp /root/switch/Nvidia/usr/lib/libEGL.so /usr/lib/libEGL.so
cp /root/switch/Nvidia/usr/lib/libEGL.so.1 /usr/lib/libEGL.so.1
cp /root/switch/Nvidia/usr/lib/libEGL.so.352.41 /usr/lib/libEGL.so.352.41
cp /root/switch/Nvidia/usr/lib/libGLESv1_CM.so /usr/lib/libGLESv1_CM.so
cp /root/switch/Nvidia/usr/lib/libGLESv1_CM.so.1 /usr/lib/libGLESv1_CM.so.1
cp /root/switch/Nvidia/usr/lib/libGLESv1_CM.so.352.41 /usr/lib/libGLESv1_CM.so.352.41
cp /root/switch/Nvidia/usr/lib/libGLESv2.so /usr/lib/libGLESv2.so
cp /root/switch/Nvidia/usr/lib/libGLESv2.so.2 /usr/lib/libGLESv2.so.2
cp /root/switch/Nvidia/usr/lib/libGLESv2.so.352.41 /usr/lib/libGLESv2.so.352.41
cp /root/switch/Nvidia/usr/lib/libGL.so /usr/lib/libGL.so
cp /root/switch/Nvidia/usr/lib/libGL.so.1 /usr/lib/libGL.so.1
cp /root/switch/Nvidia/usr/lib/libGL.so.352.41 /usr/lib/libGL.so.352.41
cp /root/switch/Nvidia/usr/lib/xorg/modules/extensions/libglx.so /usr/lib/xorg/modules/extensions/libglx.so
cp /root/switch/Nvidia/usr/lib/xorg/modules/extensions/libglx.so /usr/lib/xorg/modules/extensions/libglx.so
cp /root/switch/Nvidia/usr/lib/xorg/modules/extensions/libglx.so.352.41 /usr/lib/xorg/modules/extensions/libglx.so.352.41
# i686
cp /root/switch/Nvidia/usr/lib32/libEGL.so /usr/lib32/libEGL.so
cp /root/switch/Nvidia/usr/lib32/libEGL.so.1 /usr/lib32/libEGL.so.1
cp /root/switch/Nvidia/usr/lib32/libEGL.so.352.41 /usr/lib32/libEGL.so.352.41
cp /root/switch/Nvidia/usr/lib32/libGLESv1_CM.so /usr/lib32/libGLESv1_CM.so
cp /root/switch/Nvidia/usr/lib32/libGLESv1_CM.so.1 /usr/lib32/libGLESv1_CM.so.1
cp /root/switch/Nvidia/usr/lib32/libGLESv1_CM.so.352.41 /usr/lib32/libGLESv1_CM.so.352.41
cp /root/switch/Nvidia/usr/lib32/libGLESv2.so /usr/lib32/libGLESv2.so
cp /root/switch/Nvidia/usr/lib32/libGLESv2.so.2 /usr/lib32/libGLESv2.so.2
cp /root/switch/Nvidia/usr/lib32/libGLESv2.so.352.41 /usr/lib32/libGLESv2.so.352.41
cp /root/switch/Nvidia/usr/lib32/libGL.so /usr/lib32/libGL.so
cp /root/switch/Nvidia/usr/lib32/libGL.so.1 /usr/lib32/libGL.so.1
cp /root/switch/Nvidia/usr/lib32/libGL.so.352.41 /usr/lib32/libGL.so.352.41

# Fix X server configs
cp /etc/X11/xorg.nvidia /etc/X11/xorg.conf
rm /home/id3al/.xinitrc
cp /home/id3al/.xinitrc.nvidia /home/id3al/.xinitrc

# Signal bbswitch to turn on GPU
tee /proc/acpi/bbswitch <<<ON

# Load Nvidia Driver
nvidia-modprobe 

If you see something horrible (besides the obvious) and/or make changes... do share. Marking as solved I guess.

Last edited by X-san (2015-08-30 11:08:55)

Offline

Board footer

Powered by FluxBB