แก้ไข: X ตอนนี้ล็อคได้ผ่าน xscreensaver
Hi! ลองสิ่งนี้ฉันได้ผลลัพธ์ที่ยอดเยี่ยมโดยใช้เป็นหลักสำหรับเกม! เพราะมันจะไม่ถูกจัดการโดย Unity คุณอาจได้ผลลัพธ์ที่ยอดเยี่ยมเช่นกัน!
ฉันได้สร้างสคริปต์นี้ที่สร้างเซสชัน X ใหม่และรันคำสั่งหรือเปิดเทอร์มินัลเพื่อให้คุณสามารถเรียกใช้ที่นั่น
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"&
นอกจากนี้ให้เพิ่มที่: ตัวจัดการการตั้งค่า compiz config -> กฎหน้าต่าง -> หน้าต่างที่ปิดไม่ได้:
(class=XTerm) & (title=sudo X :1) & (name=xterm)
สิ่งนี้จะป้องกันคุณจากการปิดเทอร์มินัล (ใช้ ctrl + c เพื่อปิดเซสชั่น X อื่น ๆ และเทอร์มินัล) เพราะถ้าคุณปิด "หน้าต่าง" มันจะหยุดเซสชั่น X ปัจจุบันของคุณ!
มันมีข้อดีที่คุณไม่มี alt + ป้อนปัญหาแบบเต็มหน้าจอยังไม่มีปัญหา Alt + TAB แบบเต็มหน้าจอ คุณสามารถรันเกม 3 มิติที่มีเสถียรภาพมากขึ้นตั้งแต่ Urban Terror (linux native) ไปจนถึงเกมที่รันด้วย Wine! แม้แต่เบราว์เซอร์บางตัวที่ใช้งานเกม 3 มิติเช่น Firefox พร้อม Quake!
Obs: คุณอาจต้องการติดตั้งแพคเกจ jwm ไม่จำเป็น แต่จะสร้างความแตกต่างถ้าคุณต้องการจัดการหน้าต่างใด ๆ ที่นั่น
PS: มันสามารถปรับปรุงได้แน่นอนแผนของฉันคือการเพิ่มการตั้งค่าแป้นพิมพ์ลงในตัวเลือก แต่ฉันทำมันช้ามาก;) ถ้ามีคนปรับปรุง / ล้างมันโพสต์เพื่อที่ฉันจะสามารถปรับปรุงสคริปต์ของฉัน :)