manager the startup when booting linux

linux开机启动项配置

 

很讨厌cairo-dock直接开机就启动了,还老是报错,说什么plug-in又找不到了,从GNOME换成KDE我就准备直接写在了cairo-dock了,结果一卸载cairo各种问题随之而来,只能开机禁止掉吧先。

 

对于GNOME而言就是直接运行gnome-session-properties,出现下面的画面进行设置即可:

clip_image002

 

对于KDE,可以直接搜索Autostart,打开接口配置:

clip_image004

 

And,我们还可以添加自己开机喜欢的东西,让他自启动。

install gtk on Ubuntu Distribution

ubuntu上安装gtk

Refer from: http://www.cnblogs.com/niocai/archive/2011/07/15/2107472.html

我利用此方法成功在UBUNTU 10.04下安装GTK 2.20.1

一、安装

  1、安装gcc/g++/gdb/make 等基本编程工具

$sudo apt-get install build-essential

  2、安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件

$sudo apt-get install gnome-core-devel

  3、用于在编译GTK程序时自动找出头文件及库文件位置  

$sudo apt-get install pkg-config

  4、安装 devhelp GTK文档查看程序

$sudo apt-get install devhelp

  5、安装 gtk/glib API参考手册及其它帮助文档

$sudo apt-get install libglib2.0-doc libgtk2.0-doc

  6、安装基于GTK的界面GTK是开发Gnome窗口的c/c++语言图形库 

$sudo apt-get install glade libglade2-dev

或者

$sudo apt-get install glade-gnome glade-common glade-doc

  7、安装gtk2.0 或者 gtk+2.0所需的所有文件统通下载安装完毕

$sudo apt-get install libgtk2.0-dev

或者

$sudo apt-get install libgtk2.0*

  

二、查看GTK库版本

  1、查看1.2.x版本

$pkg-config –modversion gtk+

  2、查看 2.x 版本

$pkg-config –modversion gtk+-2.0

  3、查看pkg-config的版本

$pkg-config –version

  4、查看是否安装了gtk

$pkg-config –list-all grep gtk

  

三、测试程序

 

//Helloworld.c

#include <gtk/gtk.h>

int main(int argc,char *argv[])
{
    GtkWidget    *window;
    GtkWidget    *label;
   
    gtk_init(&argc,&argv);
   
   
/* create the main, top level, window */

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   
   
/* give it the title */
    gtk_window_set_title(GTK_WINDOW(window),
“Hello World”);
   
   
/* connect the destroy signal of the window to gtk_main_quit
     * when the window is about to be destroyed we get a notification and
     * stop the main GTK+ loop
     */

    g_signal_connect(window,
“destroy”,G_CALLBACK(gtk_main_quit),NULL);
   
   
/* create the “Hello, World” label */

    label = gtk_label_new(
“Hello, World”);
   
   
/* and insert it into the main window */

    gtk_container_add(GTK_CONTAINER(window),label);
   
   
/* make sure that everything, window and label, are visible */
    gtk_widget_show_all(window);
   
   
/* start the main loop, and let it rest until the application is closed */
    gtk_main();
   
   
return 0
;
}

 

  

四、编译运行

  1、编译

$gcc -o Helloworld Helloworld.c `pkg-config –cflags –libs gtk+-2.0`

  2、运行

$./Helloworld

 

在脚本中添加颜色

在脚本中添加颜色

       原因是:shell脚本一直被认为是单调乏味的。

15.1 创建文本菜单

       创建交互式shell脚本最常见的方法是利用菜单。为用户提供各种选项有助于知道他们了解脚本的确切功能。

       Shell脚本菜单的核心是case命令,case命令根据用户在菜单中选择的字母执行特定的命令。

15.1.1 创建菜单布局

       命令echo仅显示可打印字符,所以,如果希望使用不可打印项,必须使用-e选项。

       命令read使用-n选项后,输入内容不需要按ENTER键。

比如:

#!/bin/bash

#create the munu layout

 

function menu

{

clear

echo

echo -e "\t\t\tSys Admin Menu\n"

echo -e "\t1.Display disk space"

echo -e "\t2.Display logged on users"

echo -e "\t3.Display memory usage"

echo -e "\t0.Exit program\n\n"

echo -en "\t\tEnter Option: "

 

read -n 1 option

}

 

function diskspace

{

       clear

       df -k

}

 

function whoseon

{

       clear

       who

}

 

function memusage

{

       clear

       cat /proc/meminfo

}

 

 

while [ 1 ]

do

       menu

       case $option in

       0)

              break;;

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       *)

              clear

              echo "Sorry, wrong selection";;

       esac

       echo -en "\n\n\t\t\tHit any key to continue"

       read -n 1 line

done

clear

15.1.5 使用select命令

       创建文本菜单的大多数问题就是创建菜单布局和获取输入的答案,bash shell提供了一个便利的小工具,可以自动完成所有这些工作。

       命令select允许从单命令行创建菜单,然后获取输入的答案并自动处理它。命令select的格式是:

select variable in list

do

       commands

done

       列表参数list是用空格隔开的构建菜单的文本项列表,select命令将列表中的每一项显示为一个编号选项,然后为选择显示一个特殊的提示符(由PS3环境变量定义)。

例如下面的这个示例:

#!/bin/bash

#using select in the menu

 

function diskspace

{

       clear

       df -k

}

 

function whoseon

{

       clear

       who

}

 

function memusage

{

       clear

       cat /proc/meminfo

}

 

 

PS3="Enter option: "

select option in "Display disk space" "Display logged on users" "Display memory usage" "Exit program"

do

       clear

       case $option in

       "Exit program")

              break;;

       "Display disk space")

              diskspace;;

       "Display logged on users")

              whoseon;;

       "Display memory usage")

              memusage;;

       *)

              clear

              echo "Sorry, wrong selection";;

       esac

done

clear

       有一点需要注意的是,存储在变量中的结果值是整个文本字符串,而不是与该菜单项相关联的数字。文本字符串值才是需要在case语句中比较的内容。

15.2 添加颜色

       目前有很多的终端模拟包,允许为交互式脚本添加颜色和特殊效果。

15.2.1 ANSI转义码

       大多数终端模拟软件能够识别设置显示输出格式的ANSI转义码。ANSI转义码以控制序列指示器(control sequence indicatorCSI)开头,后面跟表示要在显示器上执行的操作的数据。CSI告诉终端该数据表示一个转义码。

       要控制显示格式,必须使用选择图形再现(Select Graphic RenditionSGR)转义码,SGE转义码的格式为:

       CSIn[;k]m

       该代码中的m代表SGR转义码。nk参数定义所使用的显示控制。可以仅指定一个参数或者同时指定两个,中间用分号隔开。显示控制参数有3类:

l  效果控制代码;

l  前景色控制代码;

l  背景色控制代码;

ANSI SGR效果控制代码

代码

描述

代码

描述

0

重置为普通模式

4

使用单下划线(可以)

1

设置为强亮度(在bash中是加粗)

5

6

使用慢闪烁(没有反应)

使用快闪烁

2

设置为弱亮度(在bash中可以)

7

背景、前景颜色反转(可以)

3

使用斜体(这个在bash中不起作用)

8

将前景色设置为背景色(可以)

因此:要将显示设置为使用倾斜的字体,需要发送代码:

CSI3m

如果需要使用斜体和闪烁,可以发送代码:

CSI3;5m

       前景色控制码和背景色控制码都使用两位数代码。前景色使用3开头的一个两位数的值,而背景色使用4开头的两位数的值,其中的第二位数字表示具体颜色。

       ANSI颜色控制代码:

代码

颜色

代码

颜色

0

黑色

4

蓝色

1

红色

5

洋红色

2

绿色

6

青色

3

黄色

7

白色

因此,要指定白色前景,发送代码:

CSI37m

要设置背景色为黑色,前景色为红色,可以发送代码:

CSI31;40m

15.2.2 显示ANSI转义码

       上面所说的都可以使用echo命令发送,像发送普通文本一样,将ANSI转义码发送到终端会话。唯一比较难的部分是创建CSI字符。

       CSI字符通常是一个两字符序列,这个序列是ESC ASCII值,后跟左方括号字符。记住,输入方法为:Ctrl+V组合键后跟ESC。在输入此组合键时,字符^[出现。

       下面为两个例子:

clip_image002

       注意,在一个echo命令中放置两个转义控制码时,重要的是要用双引号将代码字符串引起来。如果没有双引号,echo命令就不能正确地解释转义码,进而产生错误消息。

15.2.3 在脚本中使用颜色

       将前面的shell脚本只需添加上一行颜色控制码。

clip_image004

#!/bin/bash

#create the munu layout

 

function menu

{

clear

echo

echo -e "\t\t\tSys Admin Menu\n"

echo -e "\t1.Display disk space"

echo -e "\t2.Display logged on users"

echo -e "\t3.Display memory usage"

echo -e "\t0.Exit program\n\n"

echo -en "\t\tEnter Option: "

 

read -n 1 option

}

 

function diskspace

{

       clear

       df -k

}

 

function whoseon

{

       clear

       who

}

 

function memusage

{

       clear

       cat /proc/meminfo

}

 

echo “^[[44;33m”

while [ 1 ]

do

       menu

       case $option in

       0)

              break;;

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       *)

              clear

              echo "Sorry, wrong selection";;

       esac

       echo -en "\n\n\t\t\tHit any key to continue"

       read -n 1 line

done

clear

15.3 制作窗口

       dialog软件包是一个较好的小工具,最初有Savio Lam设计,是一个可以和shell脚本配合使用的文本届面下的创建对话框的工具。

       常见的对话框空间选项:

常见的对话框控件选项有:

类型       用于创建类型的选项         

–calendar    提供了一个日历,让你可以选择日期

–checklist     允许你显示一个选项列表,每个选项都可以被单独的选择  (复选框)

–from       允许您建立一个带标签的文本字段,并要求填写

–fselect      提供一个路径,让你选择浏览的文件

–gauge    显示一个表,呈现出完成的百分比,就是显示出进度。

–infobox    显示消息后,(没有等待响应)对话框立刻返回,但不清除屏幕  (信息框)

–inputbox     让用户输入文本  (输入框  )

–inputmenu   提供一个可供用户编辑的菜单 (可编辑的菜单框)

–menu       显示一个列表供用户选择   (菜单框)

–msgbox    显示一条消息,并要求用户选择一个确定按钮 (消息框  )

–pause      显示一个表格用来显示一个指定的暂停期的状态

–passwordbox   显示一个输入框,它隐藏文本

–passwordfrom  显示一个来源于标签并且隐藏的文本字段

–radiolist      提供一个菜单项目组,只有一个项目,可以选择 (单选框)

–tailbox      在一个滚动窗口文件中使用tail命令来显示文本

–tailboxbg    tailbox类似,但是在background模式下操作

–textbox    在带有滚动条的文本框中显示文件的内容  (文本框)

–timebox   提供一个窗口,选择小时,分钟,秒

–yesno      提供一个带有yesno按钮的简单信息框  (/否框)

       要在命令行上具体制定一个特定的小部件,需要使用双破折号格式:

dialog –widget parameters

       其中的widget为上面所说的控件,parameters定义该小部件窗口的大小以及它所需要的任何文本。

       每个对话框小部件均以两种形式提供输出:

l  使用STDERR

l  使用退出代码状态;

dialog命令的退出状态决定用户所选择的按钮,如果选择OKYes按钮,该dialog命令将返回0退出状态;如果选择CancelNo按钮,返回1退出状态,可以使用标准$?变量确定在该对话框小部件中选择的按钮。

比如:

msgbox小部件

dialog – – title Testing – -msgbox “This is a test” 10 20

clip_image006

       此时的OK键是支持鼠标点击的,只是没有什么效果。

yesno小部件

dialog – -title “Please answer” – -yesno “is this thing on” 10 20

clip_image008

而对于inputbox小部件为用户输入文本字符串提供了一个简单的文本框。dialog命令将文本字符串的值发送到STDERR,所以必须重定向才能获取答案。例如:

输入框小部件

dialog – -inputbox “Enter your age” 10 20 2>age.txt

clip_image010

完成后,将会生成一个age.txt文件保存输入的27。此时我们可以再次重定向以使用该值。

文本框小部件

dialog – -textbox /etc/passwd 15 45

clip_image012

       可以使用方向键在文本文件中上下左右移动。

菜单小部件

       dialog  –menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 4 "Exit" 2>text.txt

clip_image014

       移动方向键可以高亮显示标记的条目,在输入OK后会将选择的条目tag发送到text.txt文件中。

fselect小部件

dialog – -title “Select a file” –fselect $HOME/ 10 50 2>file.txt

clip_image016

 

 

dialog选项

 

 

 

选项

描述

–add-widged

除非按EscCancel键,否则继续进入下一个对话框。

–aspect ratio

指定窗口宽度/高度的纵横比

backtitle  backtitle

指定backtitle字符串显示在背景下,在屏幕的顶部。

begin   x y

指定的位置在屏幕上的上一个对话框的左上角

–cancel-label label

Cancel按钮指定一个可供选择的标签

–clear

使用对话框默认背景色清除显示

colors

允许在对话框文本中潜入ANSI颜色代码

–cr-wrap

允许在对话框文本中加入换行符,强制换行

–create-rc file

转储样本配置文件至指定文件

defaultno

将默认值 yes/no对话框设置为使用no

default-item string

设置在一份清单,表格或菜单中的默认项目。通常在框中的第一项是默认

–exit-label label

Exit按钮指定一个可供选择的标签

–extra-button

OKCancel按钮之间,显示一个其他按钮

–extra-label label

extra按钮指定一个可供选择的标签

–help

显示dialog命令的帮助信息

–help-button

OKCancel按钮之后显示Help按钮

–help-label label

help按钮指定一个可供选择的标签

–help-status

help按钮中的帮助信息被选中后,记录下检查列表、单选框列表或表单信息

–ignore

忽略dialog不能识别的选项

–input-fd fd

STDIN之外,指定其他可供选择的文件描述符

insecure

输入部件的密码时,明文显示不安全,使用星号来代表每个字符,这样安全点

–item-help

在屏幕的底部,为检查列表、单选框列表、菜单中的每一个标签添加该标签的帮助

–keep-window

不要清除屏幕上的旧小部件

–max-input size

指定输入字符串的最大规模,默认为2048

nocancel

设置在输入框,菜单,和复选框中,禁止选cancel”

–no-collapse

在对话框文本中,不要将制表换行符转换为空格。

–no-kill

tailboxbg对话框放在背景中,并禁止该进程的SIGHUP

–no-label label

No按钮指定一个可供选择的标签

no-shadow

禁止阴影出现在每个对话框的底部

ok-label  string

覆盖使用OK按钮的标签

–output-fd fd

STDERR之外,指定其他可供选择的文件描述符

–print-maxsize

打印对话框窗口允许输出的最大尺寸

–print-size

将每个对话框窗口的尺寸打印至输出

–print-version

将对话框版本打印至输出

–separator-output

无需引用,将checklist小部件的结果一次一行的输出

–separator string

指定一个字符串来隔离每个小部件的输出

–separator-widget string

指定一个字符串来隔离每个小部件的输出

–shadow

绘制阴影至每一个窗口的右下方

–single-quoted

需要时对检查列表输出使用单引用

–sleep sec

在处理对话框窗口后延迟指定的秒数

–stderr

将输出发送至STDERR,这是默认行为

–stdout

将输出发送至STDOUT

–tab-correct

将换行符转换为空格

–tab-len n

指定一个制表符所使用的空格数,默认为8

timeout  secs

超时(返回的错误代码),如果用户在指定的时间内没有给出相应

title  title

指定将在对话框的上方显示的标题字符串

–trim

删除对话框文本中字符串首部的空格和换行符

–visit-items

为了把项目列表包含在内,而修改对话框窗口中的制表符

–yes-label label

yes按钮指定一个可供选择的标签

其中的backtitle  backtitle选项是创建贯穿脚本的通用菜单标题的一种十分方便的方法。如果为每个对话框窗口置顶,该选项将贯穿应用程序始终,为脚本创建专业级的外观。

 

在脚本中使用dialog命令

       在脚本中使用dialog命令时一件非常容易的事情。只需要记住两点:

l  如果CancelNo按钮可用,请检查dialog命令的退出状态;

l  重定向STDERR以获取输出值

如果遵循上面的两条规则,就可以立即获得专业外观的交互式脚本。例如:

clip_image018

#!/bin/bash

#using dialog to create a menu

 

temp=`mktemp -t test.XXXXXX`

temp2=`mktemp -t test2.XXXXXX`

 

function diskspace

{

       #clear

       df -k > $temp

       dialog –textbox $temp 20 60

}

 

function whoseon

{

       #clear

       who > $temp

       dialog –textbox $temp 20 50

}

 

function memusage

{

       #clear

       cat /proc/meminfo > $temp

       dialog –textbox $temp 20 50

}

 

 

while [ 1 ]

do

       dialog –menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display logged on users" 3 "Display memory usage" 0 "Exit program" 2>$temp2

 

if [ $? -eq 1 ]

then

       break

fi

selection=`cat $temp2`

 

       case $selection in

       0)

              break;;

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       *)

              dialog –msgbox "Sorry, wrong selection" 10 30

       esac

done

rm -f $temp 2>/dev/null

rm -f $temp2 2>/dev/null

       其中temp用于保存各个命令的输出,temp2保存在主菜单对话框中选择的值。

15.4 获取图形

       KDEGNOME桌面环境都扩充了dialog命令的思想,在各自环境中包含了生成X Windows图形小部件的命令。

       比如KDE使用kdialog,而GNOME使用gdialogzenity

15.4.1 KDE环境

       KDE图形环境默认包括kdialog软件包,在KDE桌面环境下,kdialog软件包使用kdialog命令生成标准窗口,类似对话类型的小部件。这使您可以直接在shell脚本中创建Windows质量的用户界面。

       注意kdialogdialog最大的区别是,kdialog窗口小部件使用STDOUT而非STDERR输出值。

clip_image020

 

clip_image022

clip_image024

clip_image026

#!/bin/bash

#using kdialog to create a menu

 

temp=`mktemp -t test.XXXXXX`

temp2=`mktemp -t test2.XXXXXX`

 

function diskspace

{

       #clear

       df -k > $temp

       kdialog –textbox $temp 1000 10

}

 

function whoseon

{

       #clear

       who > $temp

       kdialog –textbox $temp 500 10

}

 

function memusage

{

       #clear

       cat /proc/meminfo > $temp

       kdialog –textbox $temp 300 500

}

 

 

while [ 1 ]

do

       kdialog –menu "Sys Admin Menu" "1" "Display disk space" "2" "Display logged on users" "3" "Display memory usage" "0" "Exit program" >$temp2

 

if [ $? -eq 1 ]

then

       break

fi

selection=`cat $temp2`

 

       case $selection in

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       0)

              break;;

       *)

              kdialog –msgbox "Sorry, wrong selection"

       esac

done

15.4.2 GNOME环境

       GNOME图形化环境支持两种可以生成标准窗口的流行软件包。

l  gdialog

l  zenity

到目前为止,大多数GNOME桌面中,zenity是最常见的软件包。

clip_image028clip_image030

clip_image032

#!/bin/bash

#using zenity to create a menu

 

temp=`mktemp -t test.XXXXXX`

temp2=`mktemp -t test2.XXXXXX`

 

function diskspace

{

       #clear

       df -k > $temp

       zenity –text-info –title "Disk space" –filename=$temp  –width 750 –height 10

}

 

function whoseon

{

       #clear

       who > $temp

       zenity –text-info –title "Logged in users" –filename=$temp  –width 500 –height 10

#    zenity –text-info $temp 20 50

}

 

function memusage

{

       #clear

       cat /proc/meminfo > $temp

       zenity –text-info –title "Memory usage" –filename=$temp  –width 300 –height 500

       zenity –text-info $temp 20 50

}

 

 

while [ 1 ]

do

       zenity –list –radiolist –title "Sys Admin Menu" –column "Select" –column "Menu Item" FALSE "Display disk space" FALSE "Display logged on users" FALSE "Display memory usage" FALSE "Exit program" >$temp2

 

if [ $? -eq 1 ]

then

       break

fi

selection=`cat $temp2`

 

       case $selection in

       "Exit")

              break;;

       "Display disk space")

              diskspace;;

       "Display users")

              whoseon;;

       "Display memory usage")

              memusage;;

       *)

              zenity –info "Sorry, invalid selection"

       esac

done

       使用zenity软件包,可以在GNOME桌面上,为交互式shell脚本增加Windows的感觉。

日历的区别:

Kdialog

clip_image034

Zenity

clip_image036

 

在脚本中添加颜色

在脚本中添加颜色

       原因是:shell脚本一直被认为是单调乏味的。

15.1 创建文本菜单

       创建交互式shell脚本最常见的方法是利用菜单。为用户提供各种选项有助于知道他们了解脚本的确切功能。

       Shell脚本菜单的核心是case命令,case命令根据用户在菜单中选择的字母执行特定的命令。

15.1.1 创建菜单布局

       命令echo仅显示可打印字符,所以,如果希望使用不可打印项,必须使用-e选项。

       命令read使用-n选项后,输入内容不需要按ENTER键。

比如:

#!/bin/bash

#create the munu layout

 

function menu

{

clear

echo

echo -e "\t\t\tSys Admin Menu\n"

echo -e "\t1.Display disk space"

echo -e "\t2.Display logged on users"

echo -e "\t3.Display memory usage"

echo -e "\t0.Exit program\n\n"

echo -en "\t\tEnter Option: "

 

read -n 1 option

}

 

function diskspace

{

       clear

       df -k

}

 

function whoseon

{

       clear

       who

}

 

function memusage

{

       clear

       cat /proc/meminfo

}

 

 

while [ 1 ]

do

       menu

       case $option in

       0)

              break;;

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       *)

              clear

              echo "Sorry, wrong selection";;

       esac

       echo -en "\n\n\t\t\tHit any key to continue"

       read -n 1 line

done

clear

15.1.5 使用select命令

       创建文本菜单的大多数问题就是创建菜单布局和获取输入的答案,bash shell提供了一个便利的小工具,可以自动完成所有这些工作。

       命令select允许从单命令行创建菜单,然后获取输入的答案并自动处理它。命令select的格式是:

select variable in list

do

       commands

done

       列表参数list是用空格隔开的构建菜单的文本项列表,select命令将列表中的每一项显示为一个编号选项,然后为选择显示一个特殊的提示符(由PS3环境变量定义)。

例如下面的这个示例:

#!/bin/bash

#using select in the menu

 

function diskspace

{

       clear

       df -k

}

 

function whoseon

{

       clear

       who

}

 

function memusage

{

       clear

       cat /proc/meminfo

}

 

 

PS3="Enter option: "

select option in "Display disk space" "Display logged on users" "Display memory usage" "Exit program"

do

       clear

       case $option in

       "Exit program")

              break;;

       "Display disk space")

              diskspace;;

       "Display logged on users")

              whoseon;;

       "Display memory usage")

              memusage;;

       *)

              clear

              echo "Sorry, wrong selection";;

       esac

done

clear

       有一点需要注意的是,存储在变量中的结果值是整个文本字符串,而不是与该菜单项相关联的数字。文本字符串值才是需要在case语句中比较的内容。

15.2 添加颜色

       目前有很多的终端模拟包,允许为交互式脚本添加颜色和特殊效果。

15.2.1 ANSI转义码

       大多数终端模拟软件能够识别设置显示输出格式的ANSI转义码。ANSI转义码以控制序列指示器(control sequence indicatorCSI)开头,后面跟表示要在显示器上执行的操作的数据。CSI告诉终端该数据表示一个转义码。

       要控制显示格式,必须使用选择图形再现(Select Graphic RenditionSGR)转义码,SGE转义码的格式为:

       CSIn[;k]m

       该代码中的m代表SGR转义码。nk参数定义所使用的显示控制。可以仅指定一个参数或者同时指定两个,中间用分号隔开。显示控制参数有3类:

l  效果控制代码;

l  前景色控制代码;

l  背景色控制代码;

ANSI SGR效果控制代码

代码

描述

代码

描述

0

重置为普通模式

4

使用单下划线(可以)

1

设置为强亮度(在bash中是加粗)

5

6

使用慢闪烁(没有反应)

使用快闪烁

2

设置为弱亮度(在bash中可以)

7

背景、前景颜色反转(可以)

3

使用斜体(这个在bash中不起作用)

8

将前景色设置为背景色(可以)

因此:要将显示设置为使用倾斜的字体,需要发送代码:

CSI3m

如果需要使用斜体和闪烁,可以发送代码:

CSI3;5m

       前景色控制码和背景色控制码都使用两位数代码。前景色使用3开头的一个两位数的值,而背景色使用4开头的两位数的值,其中的第二位数字表示具体颜色。

       ANSI颜色控制代码:

代码

颜色

代码

颜色

0

黑色

4

蓝色

1

红色

5

洋红色

2

绿色

6

青色

3

黄色

7

白色

因此,要指定白色前景,发送代码:

CSI37m

要设置背景色为黑色,前景色为红色,可以发送代码:

CSI31;40m

15.2.2 显示ANSI转义码

       上面所说的都可以使用echo命令发送,像发送普通文本一样,将ANSI转义码发送到终端会话。唯一比较难的部分是创建CSI字符。

       CSI字符通常是一个两字符序列,这个序列是ESC ASCII值,后跟左方括号字符。记住,输入方法为:Ctrl+V组合键后跟ESC。在输入此组合键时,字符^[出现。

       下面为两个例子:

clip_image002

       注意,在一个echo命令中放置两个转义控制码时,重要的是要用双引号将代码字符串引起来。如果没有双引号,echo命令就不能正确地解释转义码,进而产生错误消息。

15.2.3 在脚本中使用颜色

       将前面的shell脚本只需添加上一行颜色控制码。

clip_image004

#!/bin/bash

#create the munu layout

 

function menu

{

clear

echo

echo -e "\t\t\tSys Admin Menu\n"

echo -e "\t1.Display disk space"

echo -e "\t2.Display logged on users"

echo -e "\t3.Display memory usage"

echo -e "\t0.Exit program\n\n"

echo -en "\t\tEnter Option: "

 

read -n 1 option

}

 

function diskspace

{

       clear

       df -k

}

 

function whoseon

{

       clear

       who

}

 

function memusage

{

       clear

       cat /proc/meminfo

}

 

echo “^[[44;33m”

while [ 1 ]

do

       menu

       case $option in

       0)

              break;;

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       *)

              clear

              echo "Sorry, wrong selection";;

       esac

       echo -en "\n\n\t\t\tHit any key to continue"

       read -n 1 line

done

clear

15.3 制作窗口

       dialog软件包是一个较好的小工具,最初有Savio Lam设计,是一个可以和shell脚本配合使用的文本届面下的创建对话框的工具。

       常见的对话框空间选项:

常见的对话框控件选项有:

类型       用于创建类型的选项         

–calendar    提供了一个日历,让你可以选择日期

–checklist     允许你显示一个选项列表,每个选项都可以被单独的选择  (复选框)

–from       允许您建立一个带标签的文本字段,并要求填写

–fselect      提供一个路径,让你选择浏览的文件

–gauge    显示一个表,呈现出完成的百分比,就是显示出进度。

–infobox    显示消息后,(没有等待响应)对话框立刻返回,但不清除屏幕  (信息框)

–inputbox     让用户输入文本  (输入框  )

–inputmenu   提供一个可供用户编辑的菜单 (可编辑的菜单框)

–menu       显示一个列表供用户选择   (菜单框)

–msgbox    显示一条消息,并要求用户选择一个确定按钮 (消息框  )

–pause      显示一个表格用来显示一个指定的暂停期的状态

–passwordbox   显示一个输入框,它隐藏文本

–passwordfrom  显示一个来源于标签并且隐藏的文本字段

–radiolist      提供一个菜单项目组,只有一个项目,可以选择 (单选框)

–tailbox      在一个滚动窗口文件中使用tail命令来显示文本

–tailboxbg    tailbox类似,但是在background模式下操作

–textbox    在带有滚动条的文本框中显示文件的内容  (文本框)

–timebox   提供一个窗口,选择小时,分钟,秒

–yesno      提供一个带有yesno按钮的简单信息框  (/否框)

       要在命令行上具体制定一个特定的小部件,需要使用双破折号格式:

dialog –widget parameters

       其中的widget为上面所说的控件,parameters定义该小部件窗口的大小以及它所需要的任何文本。

       每个对话框小部件均以两种形式提供输出:

l  使用STDERR

l  使用退出代码状态;

dialog命令的退出状态决定用户所选择的按钮,如果选择OKYes按钮,该dialog命令将返回0退出状态;如果选择CancelNo按钮,返回1退出状态,可以使用标准$?变量确定在该对话框小部件中选择的按钮。

比如:

msgbox小部件

dialog – – title Testing – -msgbox “This is a test” 10 20

clip_image006

       此时的OK键是支持鼠标点击的,只是没有什么效果。

yesno小部件

dialog – -title “Please answer” – -yesno “is this thing on” 10 20

clip_image008

而对于inputbox小部件为用户输入文本字符串提供了一个简单的文本框。dialog命令将文本字符串的值发送到STDERR,所以必须重定向才能获取答案。例如:

输入框小部件

dialog – -inputbox “Enter your age” 10 20 2>age.txt

clip_image010

完成后,将会生成一个age.txt文件保存输入的27。此时我们可以再次重定向以使用该值。

文本框小部件

dialog – -textbox /etc/passwd 15 45

clip_image012

       可以使用方向键在文本文件中上下左右移动。

菜单小部件

       dialog  –menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 4 "Exit" 2>text.txt

clip_image014

       移动方向键可以高亮显示标记的条目,在输入OK后会将选择的条目tag发送到text.txt文件中。

fselect小部件

dialog – -title “Select a file” –fselect $HOME/ 10 50 2>file.txt

clip_image016

 

 

dialog选项

 

 

 

选项

描述

–add-widged

除非按EscCancel键,否则继续进入下一个对话框。

–aspect ratio

指定窗口宽度/高度的纵横比

backtitle  backtitle

指定backtitle字符串显示在背景下,在屏幕的顶部。

begin   x y

指定的位置在屏幕上的上一个对话框的左上角

–cancel-label label

Cancel按钮指定一个可供选择的标签

–clear

使用对话框默认背景色清除显示

colors

允许在对话框文本中潜入ANSI颜色代码

–cr-wrap

允许在对话框文本中加入换行符,强制换行

–create-rc file

转储样本配置文件至指定文件

defaultno

将默认值 yes/no对话框设置为使用no

default-item string

设置在一份清单,表格或菜单中的默认项目。通常在框中的第一项是默认

–exit-label label

Exit按钮指定一个可供选择的标签

–extra-button

OKCancel按钮之间,显示一个其他按钮

–extra-label label

extra按钮指定一个可供选择的标签

–help

显示dialog命令的帮助信息

–help-button

OKCancel按钮之后显示Help按钮

–help-label label

help按钮指定一个可供选择的标签

–help-status

help按钮中的帮助信息被选中后,记录下检查列表、单选框列表或表单信息

–ignore

忽略dialog不能识别的选项

–input-fd fd

STDIN之外,指定其他可供选择的文件描述符

insecure

输入部件的密码时,明文显示不安全,使用星号来代表每个字符,这样安全点

–item-help

在屏幕的底部,为检查列表、单选框列表、菜单中的每一个标签添加该标签的帮助

–keep-window

不要清除屏幕上的旧小部件

–max-input size

指定输入字符串的最大规模,默认为2048

nocancel

设置在输入框,菜单,和复选框中,禁止选cancel”

–no-collapse

在对话框文本中,不要将制表换行符转换为空格。

–no-kill

tailboxbg对话框放在背景中,并禁止该进程的SIGHUP

–no-label label

No按钮指定一个可供选择的标签

no-shadow

禁止阴影出现在每个对话框的底部

ok-label  string

覆盖使用OK按钮的标签

–output-fd fd

STDERR之外,指定其他可供选择的文件描述符

–print-maxsize

打印对话框窗口允许输出的最大尺寸

–print-size

将每个对话框窗口的尺寸打印至输出

–print-version

将对话框版本打印至输出

–separator-output

无需引用,将checklist小部件的结果一次一行的输出

–separator string

指定一个字符串来隔离每个小部件的输出

–separator-widget string

指定一个字符串来隔离每个小部件的输出

–shadow

绘制阴影至每一个窗口的右下方

–single-quoted

需要时对检查列表输出使用单引用

–sleep sec

在处理对话框窗口后延迟指定的秒数

–stderr

将输出发送至STDERR,这是默认行为

–stdout

将输出发送至STDOUT

–tab-correct

将换行符转换为空格

–tab-len n

指定一个制表符所使用的空格数,默认为8

timeout  secs

超时(返回的错误代码),如果用户在指定的时间内没有给出相应

title  title

指定将在对话框的上方显示的标题字符串

–trim

删除对话框文本中字符串首部的空格和换行符

–visit-items

为了把项目列表包含在内,而修改对话框窗口中的制表符

–yes-label label

yes按钮指定一个可供选择的标签

其中的backtitle  backtitle选项是创建贯穿脚本的通用菜单标题的一种十分方便的方法。如果为每个对话框窗口置顶,该选项将贯穿应用程序始终,为脚本创建专业级的外观。

 

在脚本中使用dialog命令

       在脚本中使用dialog命令时一件非常容易的事情。只需要记住两点:

l  如果CancelNo按钮可用,请检查dialog命令的退出状态;

l  重定向STDERR以获取输出值

如果遵循上面的两条规则,就可以立即获得专业外观的交互式脚本。例如:

clip_image018

#!/bin/bash

#using dialog to create a menu

 

temp=`mktemp -t test.XXXXXX`

temp2=`mktemp -t test2.XXXXXX`

 

function diskspace

{

       #clear

       df -k > $temp

       dialog –textbox $temp 20 60

}

 

function whoseon

{

       #clear

       who > $temp

       dialog –textbox $temp 20 50

}

 

function memusage

{

       #clear

       cat /proc/meminfo > $temp

       dialog –textbox $temp 20 50

}

 

 

while [ 1 ]

do

       dialog –menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display logged on users" 3 "Display memory usage" 0 "Exit program" 2>$temp2

 

if [ $? -eq 1 ]

then

       break

fi

selection=`cat $temp2`

 

       case $selection in

       0)

              break;;

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       *)

              dialog –msgbox "Sorry, wrong selection" 10 30

       esac

done

rm -f $temp 2>/dev/null

rm -f $temp2 2>/dev/null

       其中temp用于保存各个命令的输出,temp2保存在主菜单对话框中选择的值。

15.4 获取图形

       KDEGNOME桌面环境都扩充了dialog命令的思想,在各自环境中包含了生成X Windows图形小部件的命令。

       比如KDE使用kdialog,而GNOME使用gdialogzenity

15.4.1 KDE环境

       KDE图形环境默认包括kdialog软件包,在KDE桌面环境下,kdialog软件包使用kdialog命令生成标准窗口,类似对话类型的小部件。这使您可以直接在shell脚本中创建Windows质量的用户界面。

       注意kdialogdialog最大的区别是,kdialog窗口小部件使用STDOUT而非STDERR输出值。

clip_image020

 

clip_image022

clip_image024

clip_image026

#!/bin/bash

#using kdialog to create a menu

 

temp=`mktemp -t test.XXXXXX`

temp2=`mktemp -t test2.XXXXXX`

 

function diskspace

{

       #clear

       df -k > $temp

       kdialog –textbox $temp 1000 10

}

 

function whoseon

{

       #clear

       who > $temp

       kdialog –textbox $temp 500 10

}

 

function memusage

{

       #clear

       cat /proc/meminfo > $temp

       kdialog –textbox $temp 300 500

}

 

 

while [ 1 ]

do

       kdialog –menu "Sys Admin Menu" "1" "Display disk space" "2" "Display logged on users" "3" "Display memory usage" "0" "Exit program" >$temp2

 

if [ $? -eq 1 ]

then

       break

fi

selection=`cat $temp2`

 

       case $selection in

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       0)

              break;;

       *)

              kdialog –msgbox "Sorry, wrong selection"

       esac

done

15.4.2 GNOME环境

       GNOME图形化环境支持两种可以生成标准窗口的流行软件包。

l  gdialog

l  zenity

到目前为止,大多数GNOME桌面中,zenity是最常见的软件包。

clip_image028clip_image030

clip_image032

#!/bin/bash

#using zenity to create a menu

 

temp=`mktemp -t test.XXXXXX`

temp2=`mktemp -t test2.XXXXXX`

 

function diskspace

{

       #clear

       df -k > $temp

       zenity –text-info –title "Disk space" –filename=$temp  –width 750 –height 10

}

 

function whoseon

{

       #clear

       who > $temp

       zenity –text-info –title "Logged in users" –filename=$temp  –width 500 –height 10

#    zenity –text-info $temp 20 50

}

 

function memusage

{

       #clear

       cat /proc/meminfo > $temp

       zenity –text-info –title "Memory usage" –filename=$temp  –width 300 –height 500

       zenity –text-info $temp 20 50

}

 

 

while [ 1 ]

do

       zenity –list –radiolist –title "Sys Admin Menu" –column "Select" –column "Menu Item" FALSE "Display disk space" FALSE "Display logged on users" FALSE "Display memory usage" FALSE "Exit program" >$temp2

 

if [ $? -eq 1 ]

then

       break

fi

selection=`cat $temp2`

 

       case $selection in

       "Exit")

              break;;

       "Display disk space")

              diskspace;;

       "Display users")

              whoseon;;

       "Display memory usage")

              memusage;;

       *)

              zenity –info "Sorry, invalid selection"

       esac

done

       使用zenity软件包,可以在GNOME桌面上,为交互式shell脚本增加Windows的感觉。

日历的区别:

Kdialog

clip_image034

Zenity

clip_image036

 

linux desktop enviroment

Linux桌面环境

早期的Linux只有一个连接Linux操作系统的简单文本界面。

X Window System

X WindowX Windows图形用户接口,是一种计算机软件系统和网络协议,提供了一个基础的图形用户界面(GUI)和丰富的输入设备能力联网计算机。其中软件编写使用广义的命令集,它创建了一个硬件抽象层,允许设备独立性和重用方案的任何计算机上实现。

X Window软件是一个低级别的程序,能与PC中的显卡和监视器直接交互,并控制Linux应用程序如何在计算机中展示高级窗口和图形。

       Linux并不是唯一使用X Window System的操作系统,X Window System针对不同的操作系统编写了很多版本,对于Linux来说,只有两个软件包能执行X Window,它们是XFree86X.org。这两个软件包的工作原理相同,都控制着Linux如何使用显卡在监视器上显示内容,这个这对特定的系统进行的配置一般都在安装Linux时自动完成。

XFree86

clip_image001

       1992年至2004年,XFree86XWindow系统最被广泛使用的基建平台。XFree86 X Window系统的一个实现。最初是为 IBM PC兼容机上的 Unix OS 开发,现在已经应用于众多操作系统的平台。自1992年至2004年,它一直循著自由发放的开放源代码模式发展着。当前版本是4.7.0 它主要的运作平台是Unix类操作系统,包括各版本的UNIXLinuxBSDSolarisMacOS XIRIXOpenVMSCygwin/X等。 2004年开始,它再不是以GPL软件许可证的形式出现,而是使用XFree86®Project 公司所拥有的XFree86 License version 1.1软件许可证模式发放。

X.org

clip_image002

X.Org  X Window System 的开源实现版本,它支持LinuxSolaris、以及BSD 平台。目前它的应用越来越广泛,许多Linux发行版开始使用它来替代旧的XFree86系统。

 

       核心X Window软件仅仅生成一个图形显示环境,尽管这对于运行单个应用程序而言很不错,但是对于日常的计算机使用并不很实用,没有任何桌面环境允许用户操纵文件或启动程序,要实现这些功能,需要在X Window系统软件上安装桌面环境。

       桌面环境目前主流的为KDEGNOME,剩下的几种为轻量级的图形界面,比较适合于低内存、低配置的电脑使用。

KDE桌面

clip_image004 clip_image006

KDE项目始建于199610月,确切的公布日期是19961014日。KDE项目是由图形排版工具Lyx的开发者、一位名为Matthias Ettrich的德国人发起的,目的是为满足普通用户也能够通过简单易用的桌面来管理Unix工作站上的各种应用软件以及完成各种任务。该项目旨在创建类似于Microsoft Windows环境的图形桌面。

GNOME桌面

clip_image008 clip_image010

GNOMEThe GNU Network Object Model Environment)是一种让使用者容易操作和设定电脑环境的工具,GNOME 包含了 Panel (用来启动此程式和显示目前的状态)、桌面 (应用程式和资料放置的地方)、及一系列的标准桌面工具和应用程式,并且能让各个应用程式都能正常地运作。不管之前使用何种操作系统,都能轻易地使用 GNOME 功能强大的图形接口工具。

目前GNOME已经成为许多Linux发行版默认的桌面环境。

clip_image011由于GNOME的开发,中间也曾导致Qt许可证的一些问题。

fluxbox

clip_image013

       一个简陋的桌面,不包括Panel,只有一个弹出菜单供启动应用程序使用。

Fluxbox是一个基于GNU/Linux的轻量级图形操作界面,它基于Blackbox 0.61.1代码开发,它虽然没有GNOMEKDE那样精美,但由于它的运行对系统资源和配置要求极低,所以它被安装到很多较旧的或是对性能要求较高的机器上,其菜单和相关配置被保存于用户根目录下的.fluxbox目录里,这样使得它的配置极为便利。它的用户界面仅有一个任务栏与右键弹出式菜单。

Fluxbox是类Unix系统里一个极为轻量极的图形界面,它的运行速度相当快。它基于Blackbox并与之相兼容,这两者的窗体控件,色调等都极为相似。FluxboxKDEXfceGnome的程序支持也很不错。并且,它不需要借用其他的窗口管理器。

Xfce

clip_image015

       类似于KDE桌面,但是图形化比较低,用于低内存环境。

Xfce是一个在UnixUnix-like操作系统上运行的桌面环境,如LinuxFreeBSD,它主要是由鼠标设定,而它的设定档通常不会被普通用户看到。

Xfce 是一个有很长历史的的桌面环境项目了,在很多U Linux 中可以见到它的身影。

Xfce是使用率仅次于KDEGnomeLinux桌面系统。随着Xfce的不断发展,现在使用Xfce作桌面的系统已经越来越多了,一些大型的发行版如Debian Fedora Core将其作为可选择桌面,而且Xubuntu GNU/LinuxSAM Linux Desktop以及国内的lucky8k-veket都将Xfce作默认的桌面。

fvwm

clip_image017

clip_image019

       支持一些高级桌面功能,如虚拟桌面和虚拟Panel,但可在低内存环境运行。

FVWM作为一种虚拟桌面的代表,宗旨为以最小的内存换取最多的特性。FVWM可以轻而易举的模拟大多数的桌面系统和自定义的桌面。

fvwm是一个X11的窗口管理器,设计理念为减少内存消耗,提供3D外观和虚拟桌面。FVWMICCCM兼容的,它的开发很活跃,支持也很优秀。FVWM是一种非常优秀的窗口管理器,一旦配置完成便可以长久使用。

Fvwm是完全支持EWMH特性的一个WM,可以让你取得软件窗口特性的全部控制权。比如,如果你想让任意软件窗口达到quake-console(著名的quake控制台模式,使用`热键唤出或隐藏窗口)的操作方式,在Fvwm的配置里面,写上23句话就可以了。

fvwm95

       衍生自fvwm,外观类似Window95桌面。

clip_image021