QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6263|回复: 21

关于分区自动挂载并在桌面建立相关图标

[复制链接]
发表于 2004-10-23 23:32:38 | 显示全部楼层 |阅读模式
aaaa的要求,特开此贴,讨论如何实现分区的自动挂载并在挂载的同时,建立桌面图标。
先前的一点点讨论见此贴:
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=84935

aaaa兄弟,看你的了,嘿嘿~~~

期待中......
发表于 2004-10-24 00:27:47 | 显示全部楼层
呵呵,那是要建立相应的*.desktop文件 ~~
回复

使用道具 举报

 楼主| 发表于 2004-10-25 13:31:54 | 显示全部楼层
红旗中用来自动挂载分区,并建立链接图标的三个脚本:
(关于红旗如何实现自动挂载,如果有什么问题,可以单独发表主题探讨)

First: “/etc/rc.d/init.d/ls-disk”
[code:1]
#!/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
[/code:1]
Second:"/etc/rc.d/init.d/functions"
[code:1]
# -*-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
}
[/code:1]
Third:“/etc/rc.d/init.d/pr_functions”
[code:1]
#!/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
}
[/code:1]
回复

使用道具 举报

发表于 2004-10-25 18:00:03 | 显示全部楼层
我用就是红旗的,红旗桌面4.1对于任何磁盘系统它都会自动挂载的。
U盘都可以。可是我查了MichaelBibby提到的function文件里面并没有那么多的脚本啊
是不是要自己添加啊,但是我现在这样它也会完全的自动挂载啊!

有点不明白
回复

使用道具 举报

 楼主| 发表于 2004-10-25 18:05:06 | 显示全部楼层
这个脚本是较早的版本里头的
也许现在修改过了

zhanglang0214兄不如把你现在用的版本里的这几个脚本给发上来吧? :-)
回复

使用道具 举报

发表于 2004-10-26 10:41:52 | 显示全部楼层
呵呵,不好意思,这一块我也不是很懂,我再看了一下,发现基本上都是差不多的。
比如说,ls-disk的脚本就是完全一样,MichaelBibby你用的是什么版本的红旗啊?
回复

使用道具 举报

 楼主| 发表于 2004-10-26 12:48:52 | 显示全部楼层
[quote:4cf6601156="zhanglang0214"]呵呵,不好意思,这一块我也不是很懂,我再看了一下,发现基本上都是差不多的。
比如说,ls-disk的脚本就是完全一样,MichaelBibby你用的是什么版本的红旗啊?[/quote]
我用的是 Hiweed-Debian,目前在等Magic 1.2 Final
回复

使用道具 举报

发表于 2004-10-26 15:29:00 | 显示全部楼层
有空玩玩红旗桌面4.1亚洲版嘛!~~感觉还不错哦,用得挺爽的,特别是要安装第二张盘以后,功能很棒,wine 方面也做的很好。工具很多
回复

使用道具 举报

 楼主| 发表于 2004-10-26 15:46:57 | 显示全部楼层
谢谢zhanglang0214兄的建议,但是我目前还不打算换其他发行版 -- 除了Magic 和 Debian

不过我的同学有好几个都是用RF RC1,呵呵,看上去很不错

继续期待Magic 1.2 Final   
回复

使用道具 举报

发表于 2004-10-26 17:51:03 | 显示全部楼层
cool
回复

使用道具 举报

 楼主| 发表于 2004-10-26 22:00:55 | 显示全部楼层
[quote:e9764e2efa="suowei1979"]cool[/quote]
兄台何以每个帖子都回复一个“cool”或者“very good"?

不过,看了你个人签名里的链接,不错啊,牛人一个
回复

使用道具 举报

发表于 2004-10-27 09:42:00 | 显示全部楼层
我的硬盘上好像还保留了比较老版本的红旗automount脚本,我一会回去找找,如果有也补充一下
回复

使用道具 举报

发表于 2004-10-27 10:15:54 | 显示全部楼层
[quote:af2bcbcc7e="lanche"]呵呵,那是要建立相应的*.desktop文件 ~~[/quote]

说得不错啊!就是这个样子的。只要在上次KanKer版主发的脚本中加入建立.desktop文件的部分就可以了。具体怎么加,看一下knoppix中就应该可以了。很简单。

不过我试了一下,gnome是不支持的。所以gnoppix中就没有knoppix中那些自动加载的硬盘图标了。

不过,我在turbolinux7下面发现他的gnome桌面能够采用
<?xml version="1.0"?>
<nautilus_object nautilus_link……

link="command:mount /dev/cdrom"/>这样的语句来进行kde下面.desktop文件基本相同的工作,但我把这个文件拷贝到RH9中却不能用。查了一下帮助,也没有发现相关内容。
回复

使用道具 举报

 楼主| 发表于 2004-10-27 11:16:43 | 显示全部楼层
[quote:b8973851c5="aaaa"]
不过我试了一下,gnome是不支持的[/quote]
我试了一下,发现我的gnome-2.8下可以

我把 "应用程序“ -->Internet --> Gaim 程序往桌面上拉,桌面就会有一个快捷方式的图标。但是在gnome-terminal里用ls命令查看一下,发现是一个.desktop文件。

至于这个.desktop文件是如何写的,俺研究ing......
不过不是象你所列出来的一样,它并不是XML语言写成的。
稍后贴上来 :-)
回复

使用道具 举报

 楼主| 发表于 2004-10-27 11:54:12 | 显示全部楼层
测试成功了

我试着在~/Desktop目录里建立一个1.desktop文件,文件内容如下:
[code:1]
[Desktop Entry]
Name=Bibby # 你看到的图标的名字
Comment=.desktop file test # 对这个.desktop文件的注释,在 属性 页里可以看到
Exec=anjuta # 要执行的命令
Icon=/usr/share/pixmaps/anjuta/applogo.png # 指定一个图片做为图标
Type=Application # 表示这是一个应用程序
Terminal=false # 这个还没弄明白,但是不加的话,会出错。知道的兄弟还请赐教 :)
[/code:1]

上面的是启动应用程序,下面的是启动文件管理器Nautilus,并且指定的是/mnt目录:
[code:1]
[Desktop Entry]
Name=File Browser
Exec=nautilus /mnt --browser
Icon=file-manager
Terminal=false
Type=Application
[/code:1]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-5-7 21:17 , Processed in 0.306289 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表