EDIT: X hiện có thể khóa thông qua xscreenaver
Chào! Hãy thử điều này, tôi đang có kết quả tuyệt vời khi sử dụng nó, chủ yếu là cho các trò chơi! Vì nó sẽ không được quản lý bởi Unity, bạn cũng có thể có kết quả tuyệt vời!
Tôi đã tạo tập lệnh này để tạo một phiên X mới và chạy lệnh hoặc mở một thiết bị đầu cuối để bạn có thể chạy nó ở đó.
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"&
đồng thời, thêm phần này tại: trình quản lý cài đặt cấu hình compiz -> quy tắc cửa sổ -> cửa sổ không thể đóng:
(class=XTerm) & (title=sudo X :1) & (name=xterm)
Điều này sẽ ngăn bạn đóng thiết bị đầu cuối đó (sử dụng ctrl + c để đóng phiên X khác và cũng là thiết bị đầu cuối), vì nếu bạn đóng "cửa sổ", nó sẽ đóng băng phiên X hiện tại của bạn!
Nó có lợi thế là bạn không gặp vấn đề alt + nhập toàn màn hình, cũng không có vấn đề toàn màn hình Alt + TAB; bạn có thể chạy ổn định hơn bất kỳ trò chơi 3D nào, từ Urban Terror (linux bản địa) đến các trò chơi chạy với Wine! Thậm chí một số trình duyệt chạy các trò chơi 3D như Firefox với Quake!
Quan sát: bạn có thể muốn cài đặt gói jwm, không bắt buộc nhưng sẽ tạo sự khác biệt nếu bạn cần thực hiện bất kỳ quản lý cửa sổ nào ở đó ..
PS.: Tất nhiên nó có thể được cải thiện, kế hoạch của tôi là thêm thiết lập bàn phím vào một tùy chọn, nhưng tôi làm rất chậm;), nếu ai đó cải thiện / dọn dẹp, hãy đăng để tôi có thể cập nhật tập lệnh của tôi :)