BEARBEITEN: X ist jetzt über xscreensaver abschließbar
Hallo! Versuchen Sie dies, ich habe großartige Ergebnisse damit, hauptsächlich für Spiele! Da es nicht von Unity verwaltet wird, können Sie auch großartige Ergebnisse erzielen!
Ich habe dieses Skript erstellt, das eine neue X-Sitzung erstellt und einen Befehl ausführt oder ein Terminal öffnet, damit Sie es dort ausführen können.
openNewX.sh
#!/bin/bash
function FUNCisX1running {
ps -A -o command |grep -v "grep" |grep -q -x "X :1"
}
useJWM=true
useKbd=true
while [[ ${1:0:2} == "--" ]]; do
if [[ "$1" == "--no-wm" ]]; then #opt SKIP WINDOW MANAGER (run pure X alone)
useJWM=false
shift
elif [[ "$1" == "--no-kbd" ]]; then #opt SKIP Keyboard setup
useKbd=false
shift
elif [[ "$1" == "--isRunning" ]]; then #opt check if new X :1 is already running
if FUNCisX1running; then
exit 0
else
exit 1
fi
elif [[ "$1" == "--help" ]]; then #opt show help info
echo "usage: options runCommand"
# this sed only cleans lines that have extended options with "--" prefixed
sedCleanHelpLine='s"\(.*\"\)\(--.*\)\".*#opt" \2"' #helpskip
grep "#opt" $0 |grep -v "#helpskip" |sed "$sedCleanHelpLine"
exit 0
else
#echoc -p "invalid option $1"
echo "PROBLEM: invalid option $1"
$0 --help
exit 1
fi
done
#echo "going to execute: $@"
#runCmd="$1" #this command must be simple, if need complex put on a script file and call it!
runCmd="$@" #this command must be simple, if need complex put on a script file and call it!
#if ! echoc -q -t 2 "use JWM window manager@Dy"; then
# useJWM=false
#fi
# run in a thread, prevents I from ctrl+c here what breaks THIS X instace and locks keyb
if ! FUNCisX1running; then
xterm -e "\
echo \"INFO: hit CTRL+C to exit the other X session and close this window\";\
echo \"INFO: running in a thread (child proccess) to prevent ctrl+c from freezing this X session and the machine!\";\
echo \"INFO: hit ctrl+alt+f7 to get back to this X session (f7, f8 etc, may vary..)\";\
echo ;\
echo \"Going to execute on another X session: $runCmd\";\
sudo X :1"&
fi
#sudo chvt 8 # this line to force go to X :1 terminal
# wait for X to start
while ! FUNCisX1running; do
sleep 1
done
# run in a thread, prevents I from ctrl+c here what breaks THIS X instace and locks keyb
if $useJWM; then
if [[ ! -f "$HOME/.jwmrc" ]]; then
echo '<?xml version="1.0"?><JWM><Key mask="4" key="L">exec:xscreensaver-command --lock</Key></JWM>' \
>$HOME/.jwmrc
#if ! jwm -p; then
# rm $HOME/.jwmrc
# echo ".jwmrc is invalid"
#else
echo "see http://joewing.net/programs/jwm/config.shtml#keys"
echo "with Super+L you can lock the screen now"
#fi
fi
jwm -display :1&
fi
kbdSetup="echo \"SKIP: kbd setup\""
if $useKbd; then
kbdSetup="setxkbmap -layout us"
fi
sleep 2
xscreensaver -display :1&
# setxkbmap is good for games that have console access!; bash is to keep console open!
# nothing
#xterm -display :1&
# dead keys
#xterm -display :1 -e "setxkbmap -layout us -variant intl; bash"&
# good for games!
xterm -display :1 -e "$kbdSetup; bash -c \"$runCmd\"; bash"&
#xterm -display :1 -e "$kbdSetup; bash -c \"$@\"; bash"&
Fügen Sie dies außerdem hinzu unter: compiz config settings manager -> Fensterregeln -> nicht schließbare Fenster:
(class=XTerm) & (title=sudo X :1) & (name=xterm)
Dies verhindert, dass Sie dieses Terminal schließen (verwenden Sie Strg + C, um die andere X-Sitzung und auch das Terminal zu schließen), denn wenn Sie "das Fenster" schließen, wird Ihre aktuelle X-Sitzung eingefroren!
Es hat den Vorteil, dass Sie keine Alt + Eingabe von Vollbildproblemen haben, auch keine Alt + TAB-Vollbildprobleme; Sie können jedes 3D-Spiel mit mehr Stabilität ausführen, von Urban Terror (Linux native) bis zu Spielen mit Wine! Sogar einige Browser, die 3D-Spiele wie Firefox mit Quake ausführen!
Hinweis: Möglicherweise möchten Sie das JWM-Paket installieren, das nicht erforderlich ist, aber einen Unterschied macht, wenn Sie dort eine Fensterverwaltung durchführen müssen.
PS.: Es kann natürlich verbessert werden, mein Plan ist es, das Tastatur-Setup zu einer Option hinzuzufügen, aber ich mache es sehr langsam;), wenn jemand es verbessert / bereinigt, poste, damit ich mein Skript aktualisieren kann :)