Skip to content

Commit 4373500

Browse files
committedJan 18, 2019
Removed bbswitch
1 parent 97febf4 commit 4373500

File tree

5 files changed

+54
-52
lines changed

5 files changed

+54
-52
lines changed
 

‎.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
# Created by .ignore support plugin (hsz.mobi)
22
nvidia-xrun.iml
33
.idea
4+
test-install.sh
5+
test-cleanup.sh

‎README.md

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Currently sudo is required as the script needs to wake up GPU, modprobe the nvid
1717
* **/etc/X11/xinit/nvidia-xinitrc** - xinitrc config file. Contains the setting of provider output source
1818
* **/etc/X11/xinit/nvidia-xinitrc.d** - custom xinitrc scripts directory
1919
* **/etc/X11/nvidia-xorg.conf.d** - custom X config directory
20+
* **/etc/default/nvidia-xorg** - nvidia-xrun config file
2021
* **/usr/share/xsessions/nvidia-xrun-openbox.desktop** - xsession file for openbox
2122
* **/usr/share/xsessions/nvidia-xrun-plasma.desktop** - xsession file for plasma
2223
* **[OPTIONAL] ~/.nvidia-xinitrc** - user-level custom xinit script file. You can put here your favourite window manager for example
@@ -44,6 +45,7 @@ Also this way you can adjust some nvidia settings if you encounter issues:
4445
# Option "AllowEmptyInitialConfiguration" "Yes"
4546
# Option "UseDisplayDevice" "none"
4647
EndSection
48+
You also need to set the bus id in the `/etc/default/nvidia-xorg` file - e.g. `BUS_ID=0000:00:01.0`
4749

4850
## Automatically run window manager
4951
For convenience you can create `nano ~/.nvidia-xinitrc` and put there your favourite window manager:

‎config/nvidia-xrun

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
BUS_ID=0000:00:01.0
2+
MODULE_NVIDIA_DRM_PARAMS="modeset=1"
3+
BUS_RESCAN_WAIT_SEC=1
4+
MODULES_LOAD=(nvidia nvidia_uvm nvidia_modeset "nvidia_drm modeset=1")
5+
MODULES_UNLOAD=(nvidia_drm nvidia_modeset nvidia_uvm nvidia)

‎nvidia-xinitrc

+10-9
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,45 @@
1-
#!/bin/bash
1+
#!/usr/bin/env bash
2+
23
userresources=$HOME/.Xresources
34
usermodmap=$HOME/.Xmodmap
45
sysresources=/etc/X11/xinit/.Xresources
56
sysmodmap=/etc/X11/xinit/.Xmodmap
67
userxinitrc=$HOME/.nvidia-xinitrc
78

89
# merge in defaults and keymaps
9-
if [ -f ${sysresources} ]; then
10+
if [[ -f ${sysresources} ]]; then
1011
xrdb -merge ${sysresources}
1112
fi
1213

13-
if [ -f ${sysmodmap} ]; then
14+
if [[ -f ${sysmodmap} ]]; then
1415
xmodmap ${sysmodmap}
1516
fi
1617

17-
if [ -f "$userresources" ]; then
18+
if [[ -f "$userresources" ]]; then
1819
xrdb -merge "$userresources"
1920
fi
2021

21-
if [ -f "$usermodmap" ]; then
22+
if [[ -f "$usermodmap" ]]; then
2223
xmodmap "$usermodmap"
2324
fi
2425

2526
export LD_LIBRARY_PATH=/usr/lib64/nvidia/:/usr/lib32/nvidia:/usr/lib:${LD_LIBRARY_PATH}
2627

2728
# load additional configs
28-
if [ -d /etc/X11/xinit/nvidia-xinitrc.d ] ; then
29+
if [[ -d /etc/X11/xinit/nvidia-xinitrc.d ]] ; then
2930
for f in /etc/X11/xinit/nvidia-xinitrc.d/?*.sh ; do
30-
[ -x "$f" ] && . "$f"
31+
[[ -x "$f" ]] && . "$f"
3132
done
3233
unset f
3334
fi
3435

3536
xrandr --setprovideroutputsource modesetting NVIDIA-0
3637
xrandr --auto
3738

38-
if [ -f "$userxinitrc" ]; then
39+
if [[ -f "$userxinitrc" ]]; then
3940
sh ${userxinitrc} $*
4041
else
41-
if [ $# -gt 0 ]; then
42+
if [[ $# -gt 0 ]]; then
4243
sh -c "exec $*"
4344
fi
4445
fi

‎nvidia-xrun

100644100755
+35-43
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
#!/bin/bash
1+
#!/usr/bin/env bash
2+
23
DRY_RUN=0
34
function printHelp {
45
echo "Utility to run games and applications in separate X on discrete Nvidia graphic card"
@@ -9,7 +10,7 @@ function printHelp {
910
}
1011

1112
function execute {
12-
if [ ${DRY_RUN} -eq 1 ]
13+
if [[ ${DRY_RUN} -eq 1 ]]
1314
then
1415
echo ">>Dry run. Command: $*"
1516
else
@@ -23,35 +24,38 @@ if [[ $EUID -eq 0 ]]; then
2324
exit 1
2425
fi
2526

26-
if [ "$1" == "-d" ]
27+
if [[ "$1" == "-d" ]]
2728
then
2829
DRY_RUN=1
2930
shift 1
3031
fi
3132

33+
# load config file
34+
. /etc/default/nvidia-xrun
35+
3236
# calculate current VT
3337
LVT=`fgconsole`
3438

3539
# calculate first usable display
3640
XNUM="-1"
3741
SOCK="something"
38-
while [ ! -z "$SOCK" ]
42+
while [[ ! -z "$SOCK" ]]
3943
do
4044
XNUM=$(( $XNUM + 1 ))
4145
SOCK=$(ls -A -1 /tmp/.X11-unix | grep "X$XNUM" )
4246
done
4347

4448
NEWDISP=":$XNUM"
4549

46-
if [ ! -z "$*" ] # generate exec line if arguments are given
47-
then
50+
if [[ ! -z "$*" ]] # generate exec line if arguments are given
51+
then
4852
# test if executable exists in path
49-
if [ -x "$(which $1 2> /dev/null)" ]
53+
if [[ -x "$(which $1 2> /dev/null)" ]]
5054
then
5155
# generate exec line
5256
EXECL="$(which $1)"
5357
# test if executable exists on disk
54-
elif [ -e "$(realpath "$1")" ]
58+
elif [[ -e "$(realpath "$1")" ]]
5559
then
5660
# generate exec line
5761
EXECL="$(realpath "$1")"
@@ -70,50 +74,38 @@ EXECL="/etc/X11/xinit/nvidia-xinitrc \"$EXECL\""
7074
COMMAND="xinit $EXECL -- $NEWDISP vt$LVT -nolisten tcp -br -config nvidia-xorg.conf -configdir nvidia-xorg.conf.d"
7175

7276
# --------- TURNING ON GPU -----------
73-
echo 'Waking up nvidia GPU'
74-
if ! [ -f /proc/acpi/bbswitch ]
75-
then
76-
execute "sudo modprobe bbswitch"
77+
if [[ ! -d /sys/bus/pci/devices/${BUS_ID} ]]; then
78+
echo 'Rescanning PCI devices'
79+
execute "sudo tee /sys/bus/pci/rescan <<<1"
80+
echo "Waiting ${BUS_RESCAN_WAIT_SEC} second for rescan"
81+
execute "sleep ${BUS_RESCAN_WAIT_SEC}"
7782
fi
78-
execute "sudo tee /proc/acpi/bbswitch <<<ON"
7983

80-
# ---------- LOADING MODULES ----------
81-
echo 'Loading nvidia module'
82-
execute "sudo modprobe nvidia"
84+
echo 'Turning the card on'
85+
execute "sudo tee /sys/bus/pci/devices/${BUS_ID}/power/control <<<on"
8386

84-
echo 'Loading nvidia_uvm module'
85-
execute "sudo modprobe nvidia_uvm"
86-
87-
echo 'Loading nvidia_modeset module'
88-
execute "sudo modprobe nvidia_modeset"
89-
90-
echo 'Loading nvidia_drm module'
91-
execute "sudo modprobe nvidia_drm modeset=1"
87+
# ---------- LOADING MODULES ----------
88+
for module in "${MODULES_LOAD[@]}"
89+
do
90+
echo "Loading module ${module}"
91+
execute "sudo modprobe ${module}"
92+
done
9293

9394
# ---------- EXECUTING COMMAND --------
9495
execute ${COMMAND}
9596

9697
# ---------- UNLOADING MODULES --------
97-
echo 'Unloading nvidia_drm module'
98-
execute "sudo rmmod nvidia_drm"
99-
100-
echo 'Unloading nvidia_modeset module'
101-
execute "sudo rmmod nvidia_modeset"
102-
103-
echo 'Unloading nvidia_uvm module'
104-
execute "sudo rmmod nvidia_uvm"
105-
106-
echo 'Unloading nvidia module'
107-
execute "sudo rmmod nvidia"
98+
for module in "${MODULES_UNLOAD[@]}"
99+
do
100+
echo "Unloading module ${module}"
101+
execute "sudo modprobe ${module}"
102+
done
108103

109104
# --------- TURNING OFF GPU ----------
110-
if [ -f /proc/acpi/bbswitch ]
111-
then
112-
echo 'Turning off nvidia GPU'
113-
execute "sudo tee /proc/acpi/bbswitch <<<OFF"
114-
115-
echo -n 'Current state of nvidia GPU: '
116-
execute "cat /proc/acpi/bbswitch"
105+
if [[ -f /sys/bus/pci/devices/${BUS_ID}/remove ]]; then
106+
echo 'Removing Nvidia bus from the kernel'
107+
execute "sudo tee /sys/bus/pci/devices/${BUS_ID}/remove <<<1"
117108
else
118-
echo "Bbswitch kernel module not loaded."
109+
echo 'Enabling powersave for the PCIe controller'
110+
execute "sudo tee /sys/bus/pci/devices/${BUS_ID}/power/control <<<auto"
119111
fi

0 commit comments

Comments
 (0)
Please sign in to comment.