关于分区自动挂载并在桌面建立相关图标
应aaaa的要求,特开此贴,讨论如何实现分区的自动挂载并在挂载的同时,建立桌面图标。先前的一点点讨论见此贴:
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=84935
aaaa兄弟,看你的了,嘿嘿~~~ :-D
期待中...... 呵呵,那是要建立相应的*.desktop文件 ~~ 红旗中用来自动挂载分区,并建立链接图标的三个脚本:
(关于红旗如何实现自动挂载,如果有什么问题,可以单独发表主题探讨)
First: “/etc/rc.d/init.d/ls-disk”
#!/bin/bash
#
# ls-disk This scripts probe dosdisk and mount them.
#
# chkconfig: 345 70 05
# description: This runs the VFAT and NTFS probe
# Source function library.
. /etc/init.d/functions
case "$1" in
start)
echo -n $"Start ls-disk: "
[ -x /bin/lspart ] && /bin/lspart
success
echo ""
;;
*)
echo $"Usage: $0 {start}"
exit 1
;;
esac
exit $RETVAL
Second:"/etc/rc.d/init.d/functions"
# -*-Shell-script-*-
#
# functions This file contains functions to be used by most or all
# shell scripts in the /etc/init.d directory.
#
# Author: Miquel van Smoorenburg, <[email protected]>
# Hacked by: Greg Galloway and Marc Ewing
#
# i18n originally by: Arnaldo Carvalho de Melo <[email protected]>,
# Wanderlei Antonio Cavassin
TEXTDOMAIN=initscripts
TEXTDOMAINDIR=/etc/locale
# Make sure umask is sane
umask 022
# Set up a default search path.
PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"
export PATH
# Functions for the boot progress bar
. /etc/rc.d/init.d/pr_functions
# Get a sane screen width
[ -z "${COLUMNS:-}" ] && COLUMNS=80
[ -z "${CONSOLETYPE:-}" ] && CONSOLETYPE="`/sbin/consoletype`"
if [ -f /etc/sysconfig/i18n -a -z "${NOLOCALE:-}" ] ; then
. /etc/sysconfig/i18n
if [ "$CONSOLETYPE" != "pty" ]; then
case "${LANG:-}" in
ja_JP.eucJP|ko_KR.eucKR|zh_CN.GB2312|zh_TW.Big5|zh_CN.GB18030)
unset LANG;;
*)
export LANG
esac
else
export LANG
fi
fi
# Read in our configuration
if [ -z "${BOOTUP:-}" ]; then
if [ -f /etc/sysconfig/init ]; then
. /etc/sysconfig/init
else
# This all seem confusing? Look in /etc/sysconfig/init,
# or in /usr/doc/initscripts-*/sysconfig.txt
BOOTUP=color
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \\033[0;39m"
LOGLEVEL=1
fi
if [ "$CONSOLETYPE" = "serial" ]; then
BOOTUP=serial
MOVE_TO_COL=
SETCOLOR_SUCCESS=
SETCOLOR_FAILURE=
SETCOLOR_WARNING=
SETCOLOR_NORMAL=
fi
fi
if [ "${BOOTUP:-}" != "verbose" ]; then
INITLOG_ARGS="-q"
else
INITLOG_ARGS=
fi
# Check if $pid (could be plural) are running
checkpid() {
local i
for i in $* ; do
[ -d "/proc/$i" ] && return 0
done
return 1
}
# A function to start a program.
daemon() {
# Test syntax.
local gotbase= force=
local base= user= nice= bg= pid=
nicelevel=0
while [ "$1" != "${1##[-+]}" ]; do
case $1 in
'') echo $"$0: Usage: daemon [+/-nicelevel] {program}"
return 1;;
--check)
base=$2
gotbase="yes"
shift 2
;;
--check=?*)
base=${1#--check=}
gotbase="yes"
shift
;;
--user)
user=$2
shift 2
;;
--user=?*)
user=${1#--user=}
shift
;;
--force)
force="force"
shift
;;
[-+][0-9]*)
nice="nice -n $1"
shift
;;
*) echo $"$0: Usage: daemon [+/-nicelevel] {program}"
return 1;;
esac
done
# Save basename.
[ -z "$gotbase" ] && base=${1##*/}
# See if it's already running. Look *only* at the pid file.
if [ -f /var/run/${base}.pid ]; then
local line p
read line < /var/run/${base}.pid
for p in $line ; do
[ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid $p"
done
fi
[ -n "${pid:-}" -a -z "${force:-}" ] && return
# make sure it doesn't core dump anywhere; while this could mask
# problems with the daemon, it also closes some security problems
ulimit -S -c 0 >/dev/null 2>&1
# Echo daemon
[ "${BOOTUP:-}" = "verbose" -a -z "$LSB" ] && echo -n " $base"
# And start it up.
if [ -z "$user" ]; then
$nice initlog $INITLOG_ARGS -c "$*"
else
$nice initlog $INITLOG_ARGS -c "su -s /bin/bash - $user -c \"$*\""
fi
[ "$?" -eq 0 ] && success $"$base startup" || failure $"$base startup"
}
# A function to stop a program.
killproc() {
RC=0
# Test syntax.
if [ "$#" -eq 0 ]; then
echo $"Usage: killproc {program} [signal]"
return 1
fi
notset=0
# check for second arg to be kill level
if [ -n "$2" ]; then
killlevel=$2
else
notset=1
killlevel="-9"
fi
# Save basename.
base=${1##*/}
# Find pid.
pid=
if [ -f /var/run/${base}.pid ]; then
local line p
read line < /var/run/${base}.pid
for p in $line ; do
[ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid $p"
done
fi
if [ -z "$pid" ]; then
pid=`pidof -o $$ -o $PPID -o %PPID -x $1 || \
pidof -o $$ -o $PPID -o %PPID -x $base`
fi
# Kill it.
if [ -n "${pid:-}" ] ; then
[ "$BOOTUP" = "verbose" -a -z "$LSB" ] && echo -n "$base "
if [ "$notset" -eq "1" ] ; then
if checkpid $pid 2>&1; then
# TERM first, then KILL if not dead
kill -TERM $pid
usleep 100000
if checkpid $pid && sleep 1 &&
checkpid $pid && sleep 3 &&
checkpid $pid ; then
kill -KILL $pid
usleep 100000
fi
fi
checkpid $pid
RC=$?
[ "$RC" -eq 0 ] && failure $"$base shutdown" || success $"$base shutdown"
RC=$((! $RC))
# use specified level only
else
if checkpid $pid; then
kill $killlevel $pid
RC=$?
[ "$RC" -eq 0 ] && success $"$base $killlevel" || failure $"$base $killlevel"
fi
fi
else
failure $"$base shutdown"
RC=1
fi
# Remove pid file if any.
if [ "$notset" = "1" ]; then
rm -f /var/run/$base.pid
fi
return $RC
}
# A function to find the pid of a program. Looks *only* at the pidfile
pidfileofproc() {
local base=${1##*/}
# Test syntax.
if [ "$#" = 0 ] ; then
echo $"Usage: pidfileofproc {program}"
return 1
fi
# First try "/var/run/*.pid" files
if [ -f /var/run/$base.pid ] ; then
local line p pid=
read line < /var/run/$base.pid
for p in $line ; do
[ -z "${p//[0-9]/}" -a -d /proc/$p ] && pid="$pid $p"
done
if [ -n "$pid" ]; then
echo $pid
return 0
fi
fi
}
# A function to find the pid of a program.
pidofproc() {
base=${1##*/}
# Test syntax.
if [ "$#" = 0 ]; then
echo $"Usage: pidofproc {program}"
return 1
fi
# First try "/var/run/*.pid" files
if [ -f /var/run/$base.pid ]; then
local line p pid=
read line < /var/run/$base.pid
for p in $line ; do
[ -z "${p//[0-9]/}" -a -d /proc/$p ] && pid="$pid $p"
done
if [ -n "$pid" ]; then
echo $pid
return 0
fi
fi
pidof -o $$ -o $PPID -o %PPID -x $1 || \
pidof -o $$ -o $PPID -o %PPID -x $base
}
status() {
local base=${1##*/}
local pid
# Test syntax.
if [ "$#" = 0 ] ; then
echo $"Usage: status {program}"
return 1
fi
# First try "pidof"
pid=`pidof -o $$ -o $PPID -o %PPID -x $1 || \
pidof -o $$ -o $PPID -o %PPID -x ${base}`
if [ -n "$pid" ]; then
echo $"${base} (pid $pid) is running..."
return 0
fi
# Next try "/var/run/*.pid" files
if [ -f /var/run/${base}.pid ] ; then
read pid < /var/run/${base}.pid
if [ -n "$pid" ]; then
echo $"${base} dead but pid file exists"
return 1
fi
fi
# See if /var/lock/subsys/${base} exists
if [ -f /var/lock/subsys/${base} ]; then
echo $"${base} dead but subsys locked"
return 2
fi
echo $"${base} is stopped"
return 3
}
echo_success() {
[ "$BOOTUP" = "color" ] && $MOVE_TO_COL
echo -n "["
[ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS
echo -n $"OK"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo -n "]"
echo -ne "\r"
return 0
}
echo_failure() {
[ "$BOOTUP" = "color" ] && $MOVE_TO_COL
echo -n "["
[ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
echo -n $"FAILED"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo -n "]"
echo -ne "\r"
return 1
}
echo_passed() {
[ "$BOOTUP" = "color" ] && $MOVE_TO_COL
echo -n "["
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo -n $"PASSED"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo -n "]"
echo -ne "\r"
return 1
}
echo_warning() {
[ "$BOOTUP" = "color" ] && $MOVE_TO_COL
echo -n "["
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo -n $"WARNING"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo -n "]"
echo -ne "\r"
return 1
}
# Log that something succeeded
success() {
if [ -z "${IN_INITLOG:-}" ]; then
initlog $INITLOG_ARGS -n $0 -s "$1" -e 1
else
# silly hack to avoid EPIPE killing rc.sysinit
trap "" SIGPIPE
echo "$INITLOG_ARGS -n $0 -s \"$1\" -e 1" >&21
trap - SIGPIPE
fi
[ "$BOOTUP" != "verbose" -a -z "$LSB" ] && echo_success
return 0
}
# Log that something failed
failure() {
rc=$?
if [ -z "${IN_INITLOG:-}" ]; then
initlog $INITLOG_ARGS -n $0 -s "$1" -e 2
else
trap "" SIGPIPE
echo "$INITLOG_ARGS -n $0 -s \"$1\" -e 2" >&21
trap - SIGPIPE
fi
[ "$BOOTUP" != "verbose" -a -z "$LSB" ] && echo_failure
return $rc
}
# Log that something passed, but may have had errors. Useful for fsck
passed() {
rc=$?
if [ -z "${IN_INITLOG:-}" ]; then
initlog $INITLOG_ARGS -n $0 -s "$1" -e 1
else
trap "" SIGPIPE
echo "$INITLOG_ARGS -n $0 -s \"$1\" -e 1" >&21
trap - SIGPIPE
fi
[ "$BOOTUP" != "verbose" -a -z "$LSB" ] && echo_passed
return $rc
}
# Log a warning
warning() {
rc=$?
if [ -z "${IN_INITLOG:-}" ]; then
initlog $INITLOG_ARGS -n $0 -s "$1" -e 1
else
trap "" SIGPIPE
echo "$INITLOG_ARGS -n $0 -s \"$1\" -e 1" >&21
trap - SIGPIPE
fi
[ "$BOOTUP" != "verbose" -a -z "$LSB" ] && echo_warning
return $rc
}
# Run some action. Log its output.
action() {
STRING=$1
echo -n "$STRING "
shift
initlog $INITLOG_ARGS -c "$*" && success $"$STRING" || failure $"$STRING"
rc=$?
echo
return $rc
}
# returns OK if $1 contains $2
strstr() {
#case "$1" in
# *${2}*) return 0 ;;
#esac
#return 1
[ "$1" = "$2" ] && return 0
slice=${1#*$2*}
[ "$slice" = "$1" ] && return 1
return 0
}
# Confirm whether we really want to run this service
confirm() {
local YES=$"yY"
local NO=$"nN"
local CONT=$"cC"
while : ; do
echo -n $"Start service $1 (Y)es/(N)o/(C)ontinue? [Y] "
read answer
if strstr "$YES" "$answer" || [ "$answer" = "" ] ; then
return 0
elif strstr "$CONT" "$answer" ; then
return 2
elif strstr "$NO" "$answer" ; then
return 1
fi
done
}
Third:“/etc/rc.d/init.d/pr_functions”
#!/bin/sh
PR_BASE=`basename $0`
PREVRUN=`runlevel | cut -d ' ' -f 1`
# Display our stuff ONLY if the kernel patch is present and we are booting
# and ONLY if we are called as SXXname
if [ -w /proc/progress ] && [ $PREVRUN = "N" ] && [ `echo $PR_BASE | cut -c 1` = "S" ]; then
# get the name and the start number (0 to 99) of the service
PR_NAME=`echo $PR_BASE | cut -c 4-`
PR_NUM=`echo $PR_BASE | cut -c 2-3`
# get a value from 67 to 100
PR_NEWNUM=`echo "$PR_NUM / 3 + 70" | bc`
echo "$PR_NEWNUM starting $PR_NAME"
echo "$PR_NEWNUM starting $PR_NAME" > /proc/progress
fi
# Basic functions used in rc.sysinit (and can be used in each service script)
function pr_warn()
{
if [ -w /proc/progress ]; then
echo w > /proc/progress
fi
}
function pr_fail()
{
if [ -w /proc/progress ]; then
echo f > /proc/progress
fi
}
function pr_set()
{
if [ -w /proc/progress ]; then
echo $1 $2 > /proc/progress
fi
}
我用就是红旗的,红旗桌面4.1对于任何磁盘系统它都会自动挂载的。
U盘都可以。可是我查了MichaelBibby提到的function文件里面并没有那么多的脚本啊
是不是要自己添加啊,但是我现在这样它也会完全的自动挂载啊!
有点不明白 这个脚本是较早的版本里头的
也许现在修改过了
zhanglang0214兄不如把你现在用的版本里的这几个脚本给发上来吧? :-) 呵呵,不好意思,这一块我也不是很懂,我再看了一下,发现基本上都是差不多的。
比如说,ls-disk的脚本就是完全一样,MichaelBibby你用的是什么版本的红旗啊? 呵呵,不好意思,这一块我也不是很懂,我再看了一下,发现基本上都是差不多的。
比如说,ls-disk的脚本就是完全一样,MichaelBibby你用的是什么版本的红旗啊?
:shock: 我用的是 Hiweed-Debian,目前在等Magic 1.2 Final :mrgreen: 有空玩玩红旗桌面4.1亚洲版嘛!~~感觉还不错哦,用得挺爽的,特别是要安装第二张盘以后,功能很棒,wine 方面也做的很好。工具很多 谢谢zhanglang0214兄的建议,但是我目前还不打算换其他发行版 -- 除了Magic 和 Debian
不过我的同学有好几个都是用RF RC1,呵呵,看上去很不错 :mrgreen:
继续期待Magic 1.2 Final :mrgreen: cool cool
兄台何以每个帖子都回复一个“cool”或者“very good"? :evil:
不过,看了你个人签名里的链接,不错啊,牛人一个 :lol: 我的硬盘上好像还保留了比较老版本的红旗automount脚本,我一会回去找找,如果有也补充一下 呵呵,那是要建立相应的*.desktop文件 ~~
说得不错啊!就是这个样子的。只要在上次KanKer版主发的脚本中加入建立.desktop文件的部分就可以了。具体怎么加,看一下knoppix中就应该可以了。很简单。
不过我试了一下,gnome是不支持的。所以gnoppix中就没有knoppix中那些自动加载的硬盘图标了。
不过,我在turbolinux7下面发现他的gnome桌面能够采用
<?xml version="1.0"?>
<nautilus_object nautilus_link……
link="command:mount /dev/cdrom"/>这样的语句来进行kde下面.desktop文件基本相同的工作,但我把这个文件拷贝到RH9中却不能用。查了一下帮助,也没有发现相关内容。
不过我试了一下,gnome是不支持的
我试了一下,发现我的gnome-2.8下可以
我把 "应用程序“ -->Internet --> Gaim 程序往桌面上拉,桌面就会有一个快捷方式的图标。但是在gnome-terminal里用ls命令查看一下,发现是一个.desktop文件。
至于这个.desktop文件是如何写的,俺研究ing......
不过不是象你所列出来的一样,它并不是XML语言写成的。
稍后贴上来 :-) 测试成功了
我试着在~/Desktop目录里建立一个1.desktop文件,文件内容如下:
[Desktop Entry]
Name=Bibby # 你看到的图标的名字
Comment=.desktop file test # 对这个.desktop文件的注释,在 属性 页里可以看到
Exec=anjuta # 要执行的命令
Icon=/usr/share/pixmaps/anjuta/applogo.png # 指定一个图片做为图标
Type=Application # 表示这是一个应用程序
Terminal=false # 这个还没弄明白,但是不加的话,会出错。知道的兄弟还请赐教 :)
上面的是启动应用程序,下面的是启动文件管理器Nautilus,并且指定的是/mnt目录:
[Desktop Entry]
Name=File Browser
Exec=nautilus /mnt --browser
Icon=file-manager
Terminal=false
Type=Application
页:
[1]
2