Программы-GTK pcmanfm, lxterminal, lxtask

akorop
автомонтирование флэшек, их индикация в conky

akorop, индикацией в коньках можете поделиться? Думаю себе прикрутить...
Koluchka
akorop, индикацией в коньках можете поделиться?
Не проблема, но тут все скрипты завязаны, так что если делиться, то всем комплектом: правила udev; сервисы; скрипты монтирования; скрипт генерации текста для conky, скритп отмонтирования. Скрипт генерации меню openbox - единственное, что можно отбросить. Так вываливать всю эту кучу?
Вы меня испугали, но что уж теперь, вываливайте :)
Koluchka
akorop, индикацией в коньках можете поделиться?

Сперва - как оно монтируется и размонтируется. Тут существенным является создание регистрационных файлов в /run/removable-mount/. Каждый такой файл имеет имя устройства и содержимое - точку монтирования, например, если я втыкаю флэшку с меткой AK-16G, которая создаёт устройство /dev/sdb, то при монтировании создаётся файл /run/removable-mount/sdb1 с содержимым /media/AK-16G. При размонтировании этот файл используется, чтобы удалить точку монтирования, и затем уничтожается.
/etc/udev/rules.d/64-automount.rules
# Automount removables
# normal USB mass-storage
KERNEL=="sd[b-z]*", ENV{ID_BUS}=="usb", ACTION=="add", ENV{ID_FS_TYPE}=="?*", RUN+="/usr/bin/systemctl start automount@%k"
KERNEL=="sd[b-z]*", ACTION=="remove", RUN+="/usr/bin/systemctl stop automount@%k"

# delayed USB mass-storage as Android device with mass-storage
KERNEL=="sd[b-z]*", ENV{ID_BUS}=="usb", ACTION=="change", ENV{ID_FS_TYPE}=="?*", RUN+="/usr/bin/systemctl start automount@%k"

KERNEL=="sd[b-z]", GROUP="storage"

/etc/udev/rules.d/64-autocd.rules
# Automount CD/DVD ROM
KERNEL=="sr0", ACTION=="change", ENV{ID_FS_TYPE}=="?*", RUN+="/usr/bin/systemctl start autocd@%k"
KERNEL=="sr0", ACTION=="change", ENV{ID_FS_TYPE}!="?*", RUN+="/usr/bin/systemctl stop autocd@%k"
/etc/udev/rules.d/99-mtpmount.rules
# Automount mtp device

ENV{ID_MTP_DEVICE}=="1", ACTION=="add",\
    RUN+="/usr/local/bin/mtp_add mtp$env{BUSNUM}_$env{DEVNUM} $env{ID_MODEL}"

ENV{ID_MTP_DEVICE}=="1", ACTION=="remove",\
    RUN+="/usr/bin/systemctl stop mtp_mount@mtp$env{BUSNUM}_$env{DEVNUM}"
/etc/systemd/system/automount@.service
[Service]
Type=oneshot
TimeoutSec=0
RemainAfterExit=yes

ExecStart=/usr/local/bin/automount %I
ExecStop=/usr/local/bin/autoumount %I
/etc/systemd/system/autocd@.service
[Service]
Type=oneshot
TimeoutSec=0
RemainAfterExit=yes

ExecStart=/usr/local/bin/autocd %I
ExecStop=/usr/local/bin/autoumount %I
/etc/systemd/system/mtp_mount@.service
[Service]
Type=oneshot
TimeoutSec=0
RemainAfterExit=yes

ExecStart=/usr/local/bin/mtp_mount %I
ExecStop=/usr/local/bin/autoumount %I
/usr/local/bin/automount
#!/bin/bash
# mount $1 to the /media by label or device name
# mount for user with uid=1000

# is FS exists?
ID_FS_TYPE=$(/usr/bin/lsblk -no FSTYPE /dev/$1 2> /dev/null)
if [ ! -n "$ID_FS_TYPE" ]; then
  echo no filesystem on $1!
  systemctl stop automount@$1
  exit
fi
echo FS=$ID_FS_TYPE

#Define mountpoint: "cdrom" for sr0, label if present, else device name.
#Define mount options
if [ "$1" == "sr0" ]; then
  MP="cdrom"
  mount_options="ro"
else
  MP=$(/usr/bin/lsblk -no LABEL /dev/$1 2> /dev/null)
# Global mount options
  mount_options="user"

# Special mount options
  if [ "$ID_FS_TYPE" == "vfat" ]; then
    mount_options=$mount_options,uid=1000,umask=022,dmask=0,codepage=866,iocharset=utf8
  fi
  if [ "$ID_FS_TYPE" == "ntfs" ]; then
    mount_options=defaults,$mount_options,uid=1000,umask=022,dmask=0
  fi
fi
if [ ! -n "$MP" ]; then
  MP=$1
fi
mountpoint="/media/$MP"

echo $ID_FS_TYPE $mountpoint $mount_options

mp_dir="/run/removable-mount"
echo create $mountpoint, mount $1 and save $mp_dir/$1  >> /run/automount.log

# Mount the device
/bin/mkdir -p $mountpoint
echo /bin/mount -o $mount_options -t $ID_FS_TYPE /dev/$1 $mountpoint
/bin/mount -o $mount_options -t $ID_FS_TYPE /dev/$1 $mountpoint

# Remember the mountpoint (see "removable-umount")
mkdir -p $mp_dir
echo $mountpoint > $mp_dir/$1
/usr/local/bin/autocd
#!/bin/bash
# mount $1 to the /media/cdrom
# $1 - device name ("sr0")

mountpoint="/media/cdrom"

mp_dir="/run/removable-mount"

# Mount the device
/bin/mkdir -p $mountpoint
/bin/mount -o ro /dev/$1 $mountpoint

# Remember the mountpoint (see "removable-umount")
mkdir -p $mp_dir
echo $mountpoint > $mp_dir/$1
/usr/local/bin/mtp_mount
#!/bin/bash
# mount mtp device to the /media by device name
mp_dir="/run/removable-mount"
mountpoint=`cat $mp_dir/$1`
DEV=${1:3:3},${1:7:3}
/usr/bin/mkdir -p $mountpoint
/usr/bin/jmtpfs -o allow_other -device=$DEV $mountpoint ;
/usr/local/bin/isomount Это не автомонтирование, естественно. Это вызывается "в лоб" (конкретно - в mc по расширению .iso
#!/bin/bash
# $1 - каталог, $2 - имя файла iso
mountpoint=/media/$2

mp_dir="/run/removable-mount"
echo create $mountpoint, mount $2

# Mount the device
mkdir -p $mountpoint
mount -o loop /$1/$2 $mountpoint

# What loop device mounted?
LOOP_DEV=`cat /proc/self/mounts | grep "$mountpoint"`
LOOP_DEV=${LOOP_DEV:5:6}

# Remember the mountpoint for device (see "removable-umount")
mkdir -p $mp_dir
echo $mountpoint > $mp_dir/$LOOP_DEV
/usr/local/bin/autoumount
#!/bin/bash
# umount if mounted and remove mountpoint via mountfile $1 (see "automount")
mp_dir="/run/removable-mount"
mp_file=$mp_dir/$1
if [ -f $mp_file ]; then
  mountpoint=`cat $mp_file`
  umount $mountpoint 2> /dev/null
  rmdir $mountpoint 2> /dev/null
  rm $mp_file
fi

А теперь, наконец, скрипт и конфиг для conky:
/usr/local/bin/amounted.py
#!/usr/bin/python
res = ''
automount_dir = '/media/'
l_automount_dir = len(automount_dir);
for s in open("/proc/self/mounts"):
  mountpoint = s.split(' ', 3)[1]
  if  mountpoint[:l_automount_dir] == automount_dir:
    res = res + mountpoint[len(automount_dir):] + ' '
if res == '':
  res = 'none'
print(res)
/home/ak/.conky/.conkyrc-mount
conky.config = {
--#############################################
-- conky configuration
--#############################################

	own_window = true,
	own_window_type = 'override',
	own_window_transparent = true,
	own_window_argb_visual = true,
	double_buffer = true,
	draw_shades = false,

	use_xft = true,
	font = 'Sans:size=9',
	minimum_width = 450, minimum_height = 12,
	maximum_width = 450,
	alignment = 'bottom_left',
	gap_x = 670,
	gap_y = 0,
--#############################################
--  Output
--#############################################
};

conky.text = [[
${color grey}/media/${color 00FF00}${execi 1 amounted.py}
]];

Ну и раз уж я столько всего вывалил, то до кучи добавлю и скрипт pype-меню размонтирования для openbox:
/usr/local/bin/umenu.py
#!/usr/bin/python2
print("<openbox_pipe_menu>")
n = 0
automount_dir = '/media/'
print('<separator label="removables"/>')
for s in open("/proc/self/mounts"):
  media = ''
  s = s.replace(chr(9), ' ')
  word = s.split(' ', 3)
  dev = word[0]
  i1 = s.find(automount_dir)
  if (dev != "") and (i1 >= 0):
    if media != dev[:len(automount_dir)]:
      if n != 0:
        print('<separator/>')

      media = dev
      if (media != '/dev/sr0'):
        while media[-1].isdigit():
          media = media[:-1]

      print('<item label="eject ' + media[:-1] + '_' + media[-1] + '">')
      print('  <action name="Execute">')
      print('    <execute>')
      print('       d-eject ' + media)
      print('    </execute>')
      print('  </action>')
      print('</item>')

    n = n + 1
    point = word[1]
    print('<item label="umount ' + '  ' + dev + ' -> ' + point + '">')
    print('  <action name="Execute">')
    print('    <execute>')
    print('       d-umount ' + dev)
    print('    </execute>')
    print('  </action>')
    print('</item>')
if n == 0:
    print('<item label="none"/>')
print("</openbox_pipe_menu>")

Ух... первый раз увидел всё это скопом...
Предупреждение. В основном, всё это создавалось во времена, когда я жил под юзером с беспарольным sudo. Но я давно уже живу под рутом, и кое-что в этом хозяйстве менял, не заморачиваясь проблемами юзера. Так что не исключено, что там кое-где не хватает волшебных слов sudo, UID
Ого :) Спасибо, буду у себя адаптировать. Правда, python я не знаю... Насколько я вижу, скрипт для конки (amounted.py) не имеет никаких взаимосвязей со скриптами автомонтирования, ну так мне и к лучшему, у меня все равно системд нету :)
Koluchka
Правда, python я не знаю...
Я тоже. Но это не повод на нём не писать скрипты :)
Koluchka
ну так мне и к лучшему, у меня все равно системд нету
Так даже проще. Под systemd нельзя вызывать скрипт монтирования-размонтирования из правила udev - если он работает хоть сколько-нибудь долго, то система его молча прибивает. Поэтому приходится запускать сервис (он имеет право работать долго), а из сервиса - вызывать скрипт. А без systemd скрипты можно вызывать из правил udev "в лоб".
Я автомонтирую udevil'ом, точнее входящим в его состав devmon'ом, так что автомонтирование у меня уже есть, но для общего развития посмотрела ваш вариант с интересом :)
Можно в ОС обойтись без systemd (а также SysVinit, upstart и подобного) ?
А также без systemd-logind, policykit-1 ?
Какие минусы в таких случаях?
lin88
Какие минусы в таких случаях?
никаких плюсов, все ручками запускаешь, или пишешь свои systemd SysVinit, upstart и т.п.
прописываешь в параметры загрузки ядра init=/usr/bin/bash и получаешь систему вообще без ничего.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
Значит надо systemd и policykit-1, правильно ?
 
Зарегистрироваться или войдите чтобы оставить сообщение.