(已解决)怎样设置才能做到连接Windows远程桌面独占一个终端(Ctrl+Alt+Fn)?

讨论KDE、Gnome、Xfce、LXDE、openbox、awesome、FVWM等WM
回复
tank_dr
帖子: 13
注册时间: 2012-05-26 8:31
送出感谢: 1 次
接收感谢: 0

(已解决)怎样设置才能做到连接Windows远程桌面独占一个终端(Ctrl+Alt+Fn)?

#1

帖子 tank_dr » 2013-05-22 15:37

因为长期使用xfreerdp登陆Windows,Super键与Unity重叠,加上不能快速切出到ubuntu桌面,就产生了这个"远程桌面独占一个终端"的想法。这样也就可以完全避开一些Windows的常用快捷键了,不知道有人这么弄过没有?
看到如下session,怎样能做到登陆后只运行一个最简单的桌面和xfreerdp呢?

代码: 全选

$ ls /usr/share/xsessions
cairo-dock.desktop           gnome-classic.desktop   gnome-shell.desktop
cairo-dock-fallback.desktop  gnome.desktop           ubuntu-2d.desktop
cairo-dock-unity.desktop     gnome-fallback.desktop  ubuntu.desktop
$ cat /usr/share/xsessions/gnome-shell.desktop 
[Desktop Entry]
Name=GNOME
Comment=This session logs you into GNOME
Exec=gnome-session --session=gnome
TryExec=gnome-shell
Icon=
Type=Application
X-Ubuntu-Gettext-Domain=gnome-session-3.0
上次由 tank_dr 在 2013-05-30 16:21,总共编辑 2 次。
头像
lanjian9151
帖子: 403
注册时间: 2008-01-09 21:19
系统: Gentoo
送出感谢: 0
接收感谢: 10 次
联系:

Re: 怎样设置才能做到远程桌面独占一个终端(Ctrl+Alt+Fn)?

#2

帖子 lanjian9151 » 2013-05-24 17:13

新开一个X,把xfreedp显示在新X上就行了。
tank_dr
帖子: 13
注册时间: 2012-05-26 8:31
送出感谢: 1 次
接收感谢: 0

Re: 怎样设置才能做到远程桌面独占一个终端(Ctrl+Alt+Fn)?

#3

帖子 tank_dr » 2013-05-30 15:01

lanjian9151 写了:新开一个X,把xfreedp显示在新X上就行了。
只知道xfreerdp有个-X的参数,就是不会用的说:
-X: embed into another window with a given XID.
找到一条这样的例子(xinit.1.html#toc3):
xinit /usr/ucb/rsh fasthost cpupig -display ws:1 -- :1 -a 2 -t 5
This will start a server named X on display 1 with the arguments -a 2 -t 5. It will then start a remote shell on the machine fasthost in which it will run the command cpupig, telling it to display back on the local workstation.
我的启动文件大概要是这样子的吧:

代码: 全选

$ cat  /usr/share/xsessions/rdp-init
#!/bin/sh
RGEO=1024x800
RUSR=xxxx
RPSW=xxxx
R_IP=xx.xx.xx.xx
RPORT=80
RDP_ADD=--plugin rdpdr --data disk:Downloads:/home/tank/Downloads -- -a 16 -f --app -x l -z --disable-wallpaper --disable-full-window-drag --disable-menu-animations --disable-theming
/usr/bin/xfreerdp -g $RGEO -u ${RUSR} -p ${RPSW} ${RDP_ADD} -o -t ${RPORT} ${R_IP} &
EOF
$ cat /usr/share/xsessions/XrdpS
RGEO=1024x800
/usr/bin/xinit /usr/share/xsessions/rdp-init -- :0 -- /usr/bin/X11/X -geometry ${RGEO}-0+0 -nolisten tcp "[email protected]" &
xscreensaver -no-splash &
EOF
还有就是"X: usr not authorized to run X server, aborting."怎么破啊?(我有限制tty的数量为7个)
再比如说:想在tty6登入后直接进xfreerdp的X,不清楚是在哪个启动步骤里处理/etc/X11/default-display-manager这个文件的,所以也一直都没弄明白是哪里设置tty7是直接启动lighdm了。从Ubuntu开始搞upstart就更不清楚了。
难道是直接像下面这样做下去?

代码: 全选

$ less ~/.bashrc
# enable chinese inputer in ttys
alias fbterm="LC_CTYPE=zh_CN.UTF-8 ucimf_keyboard && fbterm -i fbterm_ucimf"
alias zhterm="LC_CTYPE=zh_CN.UTF-8 && zhcon --utf8 --drv=fb"
if [ "x$TERM" = "xlinux" ] ; then
[[ $(tty) == \/dev\/tty[1] ]] && fbterm 
[[ $(tty) == \/dev\/tty[2] ]] && zhterm
#[[ $(tty) == \/dev\/tty[6] ]] && /usr/share/xsessions/XrdpS
fi
头像
lanjian9151
帖子: 403
注册时间: 2008-01-09 21:19
系统: Gentoo
送出感谢: 0
接收感谢: 10 次
联系:

Re: 怎样设置才能做到远程桌面独占一个终端(Ctrl+Alt+Fn)?

#4

帖子 lanjian9151 » 2013-05-30 15:49

:em20

1. 运行一个终端模拟器
2. 新开一个X会话

代码: 全选

X :3 -ac - terminat &
3. 更改当前终端模拟器的DISPLAY

代码: 全选

DISPLAY=:3
4. 运行你想运行的软件,这时则可用ctrl+alt+Fx来切换不同的X
这些用户感谢了作者 lanjian9151 于这个帖子:
tank_dr (2013-05-30 16:21)
评价: 3.7%
tank_dr
帖子: 13
注册时间: 2012-05-26 8:31
送出感谢: 1 次
接收感谢: 0

Re: 怎样设置才能做到远程桌面独占一个终端(Ctrl+Alt+Fn)?

#5

帖子 tank_dr » 2013-05-30 16:17

lanjian9151 写了::em20

1. 运行一个终端模拟器
2. 新开一个X会话

代码: 全选

X :3 -ac -terminate &
3. 更改当前终端模拟器的DISPLAY

代码: 全选

DISPLAY=:3
4. 运行你想运行的软件,这时则可用ctrl+alt+Fx来切换不同的X
:em06
原来DISPLAY是这么玩的 :em03
头像
hawkIdeality
帖子: 411
注册时间: 2012-05-14 18:39
送出感谢: 5 次
接收感谢: 8 次

Re: 怎样设置才能做到远程桌面独占一个终端(Ctrl+Alt+Fn)?

#6

帖子 hawkIdeality » 2013-05-30 16:56

tank_dr 写了:
lanjian9151 写了::em20

1. 运行一个终端模拟器
2. 新开一个X会话

代码: 全选

X :3 -ac -terminate &
3. 更改当前终端模拟器的DISPLAY

代码: 全选

DISPLAY=:3
4. 运行你想运行的软件,这时则可用ctrl+alt+Fx来切换不同的X
:em06
原来DISPLAY是这么玩的 :em03
就是就是。不说我都不知道。。。 :em11
崩溃是不可抗拒滴
攒钱买(第?台)macbook,然后装ubuntu
那些说unity找不到应用程序的人拜托按一下win+A好吗?
Novelty, Novelty, Give Me Novelty
发表Linux、Win、OS X的对比帖时,建议您确认一下您真的用过Linux&&Win&&OS X,而不是用过Linux||Win||OS X。
吾乃古剑奇谭NC粉!
头像
hawkIdeality
帖子: 411
注册时间: 2012-05-14 18:39
送出感谢: 5 次
接收感谢: 8 次

Re: 怎样设置才能做到远程桌面独占一个终端(Ctrl+Alt+Fn)?

#7

帖子 hawkIdeality » 2013-05-30 17:18

lanjian9151 写了::em20

1. 运行一个终端模拟器
2. 新开一个X会话

代码: 全选

X :3 -ac - terminat &
3. 更改当前终端模拟器的DISPLAY

代码: 全选

DISPLAY=:3
4. 运行你想运行的软件,这时则可用ctrl+alt+Fx来切换不同的X

这个到底怎么玩啊?我做到第2步以后,屏幕就黑了。我按ctrl+alt+F7切回原来的桌面,再做第3步。可是按ctrl+alt+F3也切不回那个黑屏的界面啊。我打开个gedit,按ctrl+alt+F3也没有把gedit切换到新桌面啊?
崩溃是不可抗拒滴
攒钱买(第?台)macbook,然后装ubuntu
那些说unity找不到应用程序的人拜托按一下win+A好吗?
Novelty, Novelty, Give Me Novelty
发表Linux、Win、OS X的对比帖时,建议您确认一下您真的用过Linux&&Win&&OS X,而不是用过Linux||Win||OS X。
吾乃古剑奇谭NC粉!
头像
hawkIdeality
帖子: 411
注册时间: 2012-05-14 18:39
送出感谢: 5 次
接收感谢: 8 次

Re: (已解决)怎样设置才能做到连接Windows远程桌面独占一个终端(Ctrl+Alt+Fn)?

#8

帖子 hawkIdeality » 2013-05-30 17:22

哦,有了有了,做第3步之前要打开一个新的terminal才行。
崩溃是不可抗拒滴
攒钱买(第?台)macbook,然后装ubuntu
那些说unity找不到应用程序的人拜托按一下win+A好吗?
Novelty, Novelty, Give Me Novelty
发表Linux、Win、OS X的对比帖时,建议您确认一下您真的用过Linux&&Win&&OS X,而不是用过Linux||Win||OS X。
吾乃古剑奇谭NC粉!
头像
lanjian9151
帖子: 403
注册时间: 2008-01-09 21:19
系统: Gentoo
送出感谢: 0
接收感谢: 10 次
联系:

Re: 怎样设置才能做到远程桌面独占一个终端(Ctrl+Alt+Fn)?

#9

帖子 lanjian9151 » 2013-05-31 10:27

tank_dr 写了:
lanjian9151 写了::em20

1. 运行一个终端模拟器
2. 新开一个X会话

代码: 全选

X :3 -ac -terminate &
3. 更改当前终端模拟器的DISPLAY

代码: 全选

DISPLAY=:3
4. 运行你想运行的软件,这时则可用ctrl+alt+Fx来切换不同的X
:em06
原来DISPLAY是这么玩的 :em03
一般wine过war3的都知道啊 :em04
头像
lanjian9151
帖子: 403
注册时间: 2008-01-09 21:19
系统: Gentoo
送出感谢: 0
接收感谢: 10 次
联系:

Re: 怎样设置才能做到远程桌面独占一个终端(Ctrl+Alt+Fn)?

#10

帖子 lanjian9151 » 2013-05-31 10:27

hawkIdeality 写了:
tank_dr 写了:
lanjian9151 写了::em20

1. 运行一个终端模拟器
2. 新开一个X会话

代码: 全选

X :3 -ac -terminate &
3. 更改当前终端模拟器的DISPLAY

代码: 全选

DISPLAY=:3
4. 运行你想运行的软件,这时则可用ctrl+alt+Fx来切换不同的X
:em06
原来DISPLAY是这么玩的 :em03
就是就是。不说我都不知道。。。 :em11
难道你也没wine过war3啊?
头像
lanjian9151
帖子: 403
注册时间: 2008-01-09 21:19
系统: Gentoo
送出感谢: 0
接收感谢: 10 次
联系:

Re: 怎样设置才能做到远程桌面独占一个终端(Ctrl+Alt+Fn)?

#11

帖子 lanjian9151 » 2013-05-31 10:32

hawkIdeality 写了:
lanjian9151 写了::em20

1. 运行一个终端模拟器
2. 新开一个X会话

代码: 全选

X :3 -ac - terminat &
3. 更改当前终端模拟器的DISPLAY

代码: 全选

DISPLAY=:3
4. 运行你想运行的软件,这时则可用ctrl+alt+Fx来切换不同的X

这个到底怎么玩啊?我做到第2步以后,屏幕就黑了。我按ctrl+alt+F7切回原来的桌面,再做第3步。可是按ctrl+alt+F3也切不回那个黑屏的界面啊。我打开个gedit,按ctrl+alt+F3也没有把gedit切换到新桌面啊?
一般来讲X会占用f7-f12的tty,f3当然不行了 :em04
头像
lanjian9151
帖子: 403
注册时间: 2008-01-09 21:19
系统: Gentoo
送出感谢: 0
接收感谢: 10 次
联系:

Re: (已解决)怎样设置才能做到连接Windows远程桌面独占一个终端(Ctrl+Alt+Fn)?

#12

帖子 lanjian9151 » 2013-05-31 10:33

hawkIdeality 写了:哦,有了有了,做第3步之前要打开一个新的terminal才行。
莫非这就是传说中的二般的情况? :em48
tank_dr
帖子: 13
注册时间: 2012-05-26 8:31
送出感谢: 1 次
接收感谢: 0

Re: (已解决)怎样设置才能做到连接Windows远程桌面独占一个终端(Ctrl+Alt+Fn)?

#13

帖子 tank_dr » 2013-05-31 13:24

lanjian9151 写了:
hawkIdeality 写了:哦,有了有了,做第3步之前要打开一个新的terminal才行。
莫非这就是传说中的二般的情况? :em48
没注意 "&" 符号吧,估计是没看到命令提示符,没敢继续输入。

如下继续,搞了个自动切换VT的脚本(chvt需要特定权限,我自已用gksu来跑),取消 -terminate 远程断开后X自动退出的参数。
TODO:不清楚X什么时候会自动退出,也不知怎么强行销毁。

代码: 全选

#!/bin/sh
RGEO=1024x800
RUSR=xxxx
RPSW=xxxx
R_IP=xx.xx.xx.xx
RPORT="3389"
VT_N="8"
RDIS="3"
RMSG="exec_error: /usr/bin/X11/X :${RDIS} -ac vt${VT_N} -novtswitch -background none -nolisten tcp &"
RDP_ADD="--plugin rdpdr --data disk:Downloads:/home/tank/Downloads -- -a 16 -f --app -x l -z -o --disable-wallpaper --disable-full-window-drag --disable-menu-animations --disable-theming"
RICO="/usr/share/icons/Humanity/apps/48/application-x-remote-connection.svg"
[ -f /tmp/.X${RDIS}-lock ] || /usr/bin/X11/X :${RDIS} -ac vt${VT_N} -novtswitch -background none -nolisten tcp &
sleep 1
test -f /tmp/.X${RDIS}-lock
if [ $? -eq 0 ] ;then
chvt ${VT_N}
DISPLAY=:${RDIS}
/usr/bin/xfreerdp -g ${RGEO} -u ${RUSR} -p ${RPSW} ${RDP_ADD} -t ${RPORT} ${R_IP}
DISPLAY=:0
chvt 7
RMSG="Disconnected from ${R_IP}:${RPORT}"
fi
notify-send -c "network.disconnected" -u critical -t 1000 -i "${RICO}" "${RMSG} $?"
头像
lanjian9151
帖子: 403
注册时间: 2008-01-09 21:19
系统: Gentoo
送出感谢: 0
接收感谢: 10 次
联系:

Re: (已解决)怎样设置才能做到连接Windows远程桌面独占一个终端(Ctrl+Alt+Fn)?

#14

帖子 lanjian9151 » 2013-05-31 17:27

tank_dr 写了:
lanjian9151 写了:
hawkIdeality 写了:哦,有了有了,做第3步之前要打开一个新的terminal才行。
莫非这就是传说中的二般的情况? :em48
没注意 "&" 符号吧,估计是没看到命令提示符,没敢继续输入。

如下继续,搞了个自动切换VT的脚本(chvt需要特定权限,我自已用gksu来跑),取消 -terminate 远程断开后X自动退出的参数。
TODO:不清楚X什么时候会自动退出,也不知怎么强行销毁。

代码: 全选

#!/bin/sh
RGEO=1024x800
RUSR=xxxx
RPSW=xxxx
R_IP=xx.xx.xx.xx
RPORT="3389"
VT_N="8"
RDIS="3"
RMSG="exec_error: /usr/bin/X11/X :${RDIS} -ac vt${VT_N} -novtswitch -background none -nolisten tcp &"
RDP_ADD="--plugin rdpdr --data disk:Downloads:/home/tank/Downloads -- -a 16 -f --app -x l -z -o --disable-wallpaper --disable-full-window-drag --disable-menu-animations --disable-theming"
RICO="/usr/share/icons/Humanity/apps/48/application-x-remote-connection.svg"
[ -f /tmp/.X${RDIS}-lock ] || /usr/bin/X11/X :${RDIS} -ac vt${VT_N} -novtswitch -background none -nolisten tcp &
sleep 1
test -f /tmp/.X${RDIS}-lock
if [ $? -eq 0 ] ;then
chvt ${VT_N}
DISPLAY=:${RDIS}
/usr/bin/xfreerdp -g ${RGEO} -u ${RUSR} -p ${RPSW} ${RDP_ADD} -t ${RPORT} ${R_IP}
DISPLAY=:0
chvt 7
RMSG="Disconnected from ${R_IP}:${RPORT}"
fi
notify-send -c "network.disconnected" -u critical -t 1000 -i "${RICO}" "${RMSG} $?"
如果不加 -terminat参数的话是没法销毁X的。
tank_dr
帖子: 13
注册时间: 2012-05-26 8:31
送出感谢: 1 次
接收感谢: 0

Re: (已解决)怎样设置才能做到连接Windows远程桌面独占一个终端(Ctrl+Alt+Fn)?

#15

帖子 tank_dr » 2013-06-05 16:56

lanjian9151 写了:如果不加 -terminat参数的话是没法销毁X的。
不知道这里玩VirtualBox的多不,花了些时间改了下,方便自己用。很少玩shell,做法不聪明就更不要说了。
终结版:
  • -terminat 参数加了回去。
    把脚本扩展了一下,解析脚本同目录下远程登陆的配置文件。
    加入VirtualBox的VMrdp启用,类似Windows RDP。

代码: 全选

$ cat Start_xfreerdp.cfg
#IS_VM	RDP_Lable	RGEO	RUSR	RPSW	R_IP	RPORT	VT_N	RDIS
false	HT_.62_rdp	1024x800	bala	balabala	172.32.54.12	88	8	1
false	test_ask	1024x800	bala	<ask>	172.32.54.21	3389	8	2
true	Windows XP	1024x800	<skip>	<skip>	127.0.0.1	3390	9	3
true	Windows 7	1024x800	<skip>	<skip>	127.0.0.1	3391	10	4
true	Windows 2003	1024x800	<skip>	<skip>	127.0.0.1	3392	11	5

代码: 全选

$ cat Start_xfreerdp
#!/bin/sh
VM_RDP="Windows XP"
RGEO="1024x800"
RUSR="test"
RPSW="test"
R_IP="127.0.0.1"
RPORT="3389"
VT_N="8"
RDIS="3"
RMSG=""
RICO="/usr/share/icons/Humanity/apps/48/application-x-remote-connection.svg"
SPLIT_="------------------------------------------------------------"

BAKIFS=${IFS}
IFS=$'\t\n'
RCFG=$0.cfg
RLOG=$0.log
RTMPS=/tmp/.vms
RTMPR=/tmp/.vmr
RTMPC=/tmp/.vmc

#cmds:setvar|getlist|getlist,VM_RDP
function cfg_fun()
{
case $1 in
  setvar)
  if [ ! -z "$2" ] ;then
  cat ${RCFG} | grep -m 1 "$2" > ${RTMPC}
  #cat ${RCFG} | grep -m 1 "$2" | sed 's/\t/\n/g'
  read ISVM VM_RDP RGEO RUSR RPSW R_IP RPORT VT_N RDIS < ${RTMPC}
  fi
  ;;
  getlist)
  if [[ `cat "${RCFG}" | grep -v "^#" | cut -f2` ]]; then
  rm "${RTMPS}" "${RTMPR}"  >/dev/null 2>&1
  VBoxManage list vms > "${RTMPS}" 2>&1
  if [ $? -eq 0 ] ;then
  VBoxManage list runningvms > "${RTMPR}" 2>&1
  fi
  echo "${SPLIT_}";
  [[ `stat -c%s "${RTMPS}"` -gt 0 ]] && echo -e "\033[1m\033[32mSystem VMS:\033[0m\n`cat ${RTMPS}`"
  [[ `stat -c%s "${RTMPR}"` -gt 0 ]] && echo -e "\033[1m\033[32mCurrent Running VMS:\033[0m\033[31m\n`cat ${RTMPR}`\033[0m"
  fi
  ;;
  genlist)
  cat "${RCFG}" | grep -v "^#" | cut -f2
  ;;
  *)
  echo "\033[1musage :$0 <setvar|getlist|genlist> <para1>\033[0m"
  ;;
esac
return $?
}

#<query|setvar <var>>
function vbox_fun()
{
case $1 in
  setvar)
  [ ! -z $2 ] && VBoxManage showvminfo "${VM_RDP}" --machinereadable 2>/dev/null | grep "^$2=" | cut -d\" -f2
  ;;
  query)
  VBoxManage showvminfo "${VM_RDP}" --machinereadable 2>/dev/null | grep -E '(^vrde=|^SharedFolderPathMachineMapping|^VRDE|^vrdeport|^vrdeaddress|^CurrentSnapshotName|^VMState)'
  ;;
  *)
  echo "\033[1musage :$0 <setvar <var>|query>\033[0m"
  ;;
esac
return $?
}

function do_connect()
{
RMSG="\033[1mConnect to ${R_IP}:${RPORT} @ :${RDIS} On tty${VT_N} ...\033[0m"
echo -e "${RMSG}" | tee -a "${RLOG}"
[ -f /tmp/.X${RDIS}-lock ] || /usr/bin/X11/X :${RDIS} -ac vt${VT_N} -terminate -novtswitch -background none -nolisten tcp 2>>"${RLOG}" &
#ps aux | grep `cat /tmp/.X${RDIS}-lock`
#openvt -c ${VT_N} -s -w -l -- /usr/bin/xfreerdp -g "${RGEO}" -u "${RUSR}" -p "${RPSW}" ${RDP_ADD} -t ${RPORT} ${R_IP}
sleep 1
test -f /tmp/.X${RDIS}-lock
if [ $? -eq 0 ] ;then
#chvt ${VT_N}
DISPLAY=:${RDIS}
echo -e "\033[1m/usr/bin/xfreerdp -g \"${RGEO}\" -u \"${RUSR}\" -p \"${RPSW}\" --plugin rdpdr --data disk:Share:/home/tank/Downloads -- -a 16 -f --app -x l -z -o --disable-wallpaper --disable-full-window-drag --disable-menu-animations --disable-theming -t ${RPORT} ${R_IP}\033[0m" | tee -a "${RLOG}"
/usr/bin/xfreerdp -g "${RGEO}" -u "${RUSR}" -p "${RPSW}" --plugin rdpdr --data disk:Share:/home/tank/Downloads -- -a 16 -f --app -x l -z -o --disable-wallpaper --disable-full-window-drag --disable-menu-animations --disable-theming -t ${RPORT} ${R_IP} &
sleep 3
DISPLAY=:0
#chvt 7
else
RMSG="\033[31merror: /usr/bin/X11/X :${RDIS} -ac vt${VT_N} -terminate -novtswitch -background none -nolisten tcp &\033[0m"
fi
return $?
}

function main()
{
while true
do
echo -e "${RMSG}" | tee -a "${RLOG}"
echo "Parsing config file:\"${RCFG}\""
cfg_fun "getlist"
echo "${SPLIT_}" | tee -a "${RLOG}"
PS3="Choose a RDP for connect:"
echo -ne "\033[33m"
select VM_RDP in `cfg_fun "genlist"` "[jobs]" "[fg]" "[clear]" "[exit]";do
case ${VM_RDP} in
  "[jobs]"|"")
  echo -e "\033[0m`jobs -l | grep ^\[[0-9]*\][+-]`\033[33m";
  ;;
  "[fg]")
  cjb=`jobs -l | grep '^\[[0-9]*\][+]' | sed 's/^\[\([0-9]*\)\].*$/\1/g'`
  echo -e "\033[0mSwitch to background jobs:${cjb}\033[33m"
  [ ! -z "${cjb}" ] && fg %${cjb}
  ;;
  "[clear]")
  clear;
  ;;
  "[exit]")
  if [ -z "`jobs -l | grep ^\\[[0-9]*\\][+-]`" ]; then echo -ne "\033[0m"; break 2; else echo -e "\033[1mJobs Exist:\033[0m\n`ps axo ppid,pid,pcpu,stat,tty,command | grep \"^[ ]*$$\" | grep -v \"[RS]+\"`\033[33m"; fi;
  ;;
  *)
  break;
  ;;
esac
done
echo -ne "\033[0m"
cfg_fun "setvar" "${VM_RDP}"

if [ "${ISVM}" == "true" ] ;then
echo "${SPLIT_}"
vbox_fun "query";
if [ $? -gt 0 ] ;then
  RMSG="\033[31mVirtualMachine \033[0m\033[36m\"${VM_RDP}\"\033[0m\033[31m Not Found.\033[0m"
  continue;
fi
fi
echo "${SPLIT_}"
echo -e "VirtualMachine:<${ISVM}>\n\tname:\"${VM_RDP}\"\n\tScreen:${RGEO}\n\tLoginas:[${RUSR}]\tuse:[${RPSW}]\n\t${R_IP}:${RPORT}\tto tty${VT_N}@:${RDIS}"
if [ "${ISVM}" == "true" ] ;then
  if [[ "`vbox_fun \"setvar\" \"VMState\"`" == "running" ]] ;then
  if [[ "`vbox_fun \"setvar\" \"VRDEActiveConnection\"`" == "on" ]] ;then
    echo -e "\033[31m\033[3mVirtualMachine \033[0m\033[36m\"${VM_RDP}\"\033[0m\033[31m is connected by \033[0m\033[36m`vbox_fun setvar VRDEUserName`\033[0m\033[31m.\033[0m"
  fi
  fi
fi
Choice="S"
echo "${SPLIT_}"
read -n1 -p "Skip, Connect or Quit? (S/c/q):" Choice
echo
case ${Choice} in
  q|Q)
  if [ -z "`jobs`" ]; then break; else echo -e "\033[1mJos Exist:\033[0m\n`ps axo ppid,pid,pcpu,stat,tty,command | grep \"^[ ]*$$\"`\033[0m"; continue; fi;
  ;;
  c|C)
  ;;
  *)
  RMSG="\033[31mSkiping:\033[3m${VM_RDP}:${RPORT}\033[0m"
  continue;
  ;;
esac

if [ "${ISVM}" == "true" ] ;then
VMState=`vbox_fun "setvar" "VMState"`;
case ${VMState} in
  poweroff)
  VBoxHeadless --startvm "${VM_RDP}" --vrdeproperty "TCP/Ports=${RPORT}"  --vrdeproperty "TCP/Address=${R_IP}" &
  sleep 2
  if [[ "`vbox_fun \"setvar\" \"VMState\"`" != "running" ]] ;then
    RMSG="\033[31mError in starting:\033[3m${VM_RDP}:${RPORT}\033[0m"
    continue;
  fi
  ;;
  running)
  ;;
  *)
  RMSG="\033[31mERROR in quering VBoxState:VMState=\033[3m\"${VMState}\".\033[0m"
  continue;
  ;;
esac
fi
echo "${SPLIT_}"
[ "${RUSR}" == "<skip>" ] && RUSR=""
[ "${RPSW}" == "<skip>" ] && RPSW=""
[ "${RUSR}" == "<ask>" ] && read -p "Input Login User Name[${RUSR}]:" RUSR
[ "${RPSW}" == "<ask>" ] &&  read -p "PassWord:[${RPSW}]" RPSW

do_connect;
notify-send -c "network.disconnected" -u critical -t 1000 -i "${RICO}" "${RMSG} $?"
done
}

main;
echo -ne "\033[0m"
IFS=${BAKIFS}
exit $?;
P.S.
不明白为什么切换不到后台的程序。
1.png
回复

回到 “窗口管理器”