31 (26.06.2012 22:29:02 отредактировано zenon)

Re: Маленькие хитрости в Linux

moshell поставь zsh, скопируй тот конфиг в ~/.zshrc, что не надо закоментируй, и разбирайся, например я без автокомплита (<tab><tab>) уже немогу, автодополнение работает и с apt-get и emerge и с каталогами.... удобно.
Чтобы работал нормально нужны grc, most, pager, zsh-completion (зависит от дистрибутива)

32

Re: Маленькие хитрости в Linux

newzenon
ок.

кстати, раньше фишка была такая на форуме, кликаешь на юзера, и в поле нового сообщения вставляется ник, удобно при обращении.
куда оно подевалось?

33

Re: Маленькие хитрости в Linux

moshell пишет

куда оно подевалось?

34

Re: Маленькие хитрости в Linux

moshell пишет

красивая консоль. но меня сбивает с толку куча вкусностей.
подскажи плз мне бы только приглашение разукрасить чтоб ориентироваться было проще между командами

Настоящие «вкусности» zsh — http://grml.org/zsh/zsh-lovers.html

35

Re: Маленькие хитрости в Linux

вкусности это конечно хорошо.
а вот в плане функциональности и интерпретации, много различий между zsh и bash?
к примеру на работе сначала не понял, почему не перезаписывает файл вывод ">"
оказалось

esernar@spbmas1> env | grep SHELL
SHELL=/usr/bin/tcsh
esernar@spbmas1>

и делать надо ">!"

36

Re: Маленькие хитрости в Linux

ArchLinux

aurpac (из АUR) - удобная штуковина помогающая обновлять как офф репы так и aur.

37

Re: Маленькие хитрости в Linux

Будет интересно для тех кто использует LaTex
В LaTex можно задавать свои параметры цвета, для этого существует стилевой пакет xcolor тыц

Для его подключения, достаточно в преамбуле документа ввести
\usepackage{xcolor}

Далее для автоматизации выбора цвета можно использовать следующий скрипт.

#!/bin/bash
exec 3>&1;
COLOR="`zenity --color-selection --show-palette`"
C1=$(echo ${COLOR:1:2}|tr a-z A-Z)
C2=$(echo ${COLOR:7:2}|tr a-z A-Z)
C3=$(echo ${COLOR:9:2}|tr a-z A-Z)
D1=$(echo "ibase=16; $C1"|bc)
D2=$(echo "ibase=16; $C2"|bc)
D3=$(echo "ibase=16; $C3"|bc)
COLOR="$(gdialog --title "Введите название цвета" --inputbox "введите название цвета" 2>&1 1>&3)"
zenity --title="Цвет" --text="Cкопируйте текст" --entry --entry-text="\\definecolor{$COLOR}{RGB}{$D1,$D2,$D3}" 2>/dev/null

Использует для диалога zenity, при желании можно переделать скрипт вместо zenity, использовать другие программы, например: kdialog, Xdialog

На выходе скрипт возвращает готовую команду LaTex которую остается только скопировать в преамбулу документа.

пример использования:

+ открыть спойлер

\documentclass[a4paper,12pt]{article}
\usepackage{mathtext}
\usepackage[T2A]{fontenc}
\usepackage[utf8x]{inputenc}
\usepackage[russian]{babel}
\usepackage{xcolor}
\definecolor{deca}{RGB}{11,0,255}
\definecolor{green1}{RGB}{53,190,33}
\definecolor{redf}{RGB}{237,54,22}
\begin{document}
\fontsize{20}{20}\selectfont
\textcolor{deca}{\textbf{Hello world!!}}

\textcolor{green1}{\textbf{Здравствуй мир!!}}

\textcolor{redf}{\textbf{Здравствуй мир!!}}
\end{document}

Довольно удобное средство выбора цвета, так же работает пипетка для выбора цвета.

38

Re: Маленькие хитрости в Linux

Немного подправил скрипт теперь работает выбор кнопок отмена, до этого диалоги просто тупо последовательно выполнялись.

#!/bin/bash
start()
{
exec 3>&1;
COLOR="`zenity --color-selection --show-palette`"
case $? in

         1)
                exit 0;;
        -1)
                echo "An unexpected error has occurred."; exit 0;;
esac
C1=$(echo ${COLOR:1:2}|tr a-z A-Z)
C2=$(echo ${COLOR:7:2}|tr a-z A-Z)
C3=$(echo ${COLOR:9:2}|tr a-z A-Z)
D1=$(echo "ibase=16; $C1"|bc)
D2=$(echo "ibase=16; $C2"|bc)
D3=$(echo "ibase=16; $C3"|bc)
COLOR="$(gdialog --title "Введите название цвета" --inputbox "введите название цвета" 2>&1 1>&3)"
if [ "$?" -eq "1" ]
 then exit 0 
fi
zenity --title="Цвет" --text="Cкопируйте текст" --entry --entry-text="\\definecolor{$COLOR}{RGB}{$D1,$D2,$D3}"
}
start 2>/dev/null

39

Re: Маленькие хитрости в Linux

ormorph пишет

echo "An unexpected error has occurred."; exit 0;;

exit 1 постаьте, нулевой статус завершения означает успешное завершение.

40 (16.02.2013 11:26:08 отредактировано zenon)

Re: Маленькие хитрости в Linux

Проверка с логом :_)

error_code=$?
if [ $error_code != 0 ]; then
  echo "Случилась ошибка с кодом $error_code" | tee -a filename.log
  exit $error_code
fi

41

Re: Маленькие хитрости в Linux

yars пишет

exit 1 постаьте, нулевой статус завершения означает успешное завершение.

Ну да, именно по тому что это успешное завершение, по этому и поставил exit 0
Это же не скрипт после которого используешь выражение || и &&, для них как раз и нужно выставлять завершение с ошибкой или без, в данном случае завершается без ошибок, по этому параметр этот (1) не нужен.
Тут и предполагается, что нажав клавишу отмена, тоже происходит успешное завершение.

42

Re: Маленькие хитрости в Linux

BASH
Цикл while как правило с использованием конструкции типа:

cat files|while read file
do 
  ...
done

переменная используемая в цикле как правило не выходит за пределы цикла, так как ее не пропускает конвейер.
По этому в таких случаях данную конструкцию следует заменить другой.

while read file
do
  ...
done <<<"$(cat files)"

пример:

#!/bin/sh

# подсчет количества строк
x=0
while read file
do
 x=$[x+1]
done <<<"$(cat files)"

echo $x

Странно что в стандартных манах все примеры данного цикла идут с использованием конвейера.

43

Re: Маленькие хитрости в Linux

В некоторых оконных менеджерах отсутствует возможность выключать и перезагружать компьютер
Я в меню fluxbox прописал скрипт вызывающий диалог zenity
Перед выполнением скрипта следует конечно настроить /etc/sudoers
у меня это USER ALL=(ALL) ALL.

Собственно сам скрипт.

#!/bin/sh

VARIANT=$(zenity --list --title="Выберите вариант"\
 --column="Вариант" --column="Описание" reboot\
 "Перезагрузить компьютер" poweroff\
 "Выключить компьютер")

if [ "$?" -eq "1" ] ; then exit 0
elif [ "$VARIANT" == "" ] ; then exit 0 
fi

for  (( i=0; i<5; i++ ))
 do
  PASSWD=$(zenity --entry \
  --title="Выключить" \
  --text="Введите пароль:" \
  --entry-text "password" \
  --hide-text)
  if  [ "$?" -eq "1" ] ;
    then exit 0
  fi
  echo $PASSWD|sudo -S "/sbin/$VARIANT"
  if [ "$?" -eq "0" ] ; then  exit 0
  fi
done

44

Re: Маленькие хитрости в Linux

ormorph пишет

у меня это USER ALL=(ALL) ALL.

Ага, еще один рут в системе ab
Как вариант:

user localhost = NOPASSWD: /sbin/poweroff,/sbin/reboot

45

Re: Маленькие хитрости в Linux

yars⇓ пишет

Как вариант:

Использовать dbus-send:
/home/lupo/.config/awesome/shutdown_dialog.sh

#!/bin/sh
ACTION=$(kdialog --radiolist "Опции выхода:" quit "Выйти" on halt "Выключить" off reboot "Перегрузить" off sleep "Усыпить" off)
if [ -n "${ACTION}" ];then
  case $ACTION in
  quit)
   # pkill awesome
  echo "awesome.quit()" | awesome-client
    ;;
  halt)

        dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit \
        /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
    ;;
  reboot)

        dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit \
        /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
    ;;
  sleep)

        dbus-send --system --print-reply --dest=org.freedesktop.UPower \
        /org/freedesktop/UPower org.freedesktop.UPower.Suspend
    ;;
  esac
fi

46

Re: Маленькие хитрости в Linux

yars⇓ пишет

Ага, еще один рут в системе
Как вариант:
user localhost NOPASSD: /sbin/poweroff,/sbin/reboot

Спасибо, не знал, sudo не часто использую.
Немного правда не так, но ничего  ab

Правильней так:
USER localhost=NOPASSWD: /sbin/poweroff,/sbin/reboot

Уже подправил скрипт теперь работает так:

#!/bin/sh

VARIANT=$(zenity --list --title="Выберите вариант"\
 --column="Вариант" --column="Описание" reboot\
 "Перезагрузить компьютер" poweroff\
 "Выключить компьютер")

if [ "$?" -eq "1" ] ; then exit 0
elif [ "$VARIANT" == "" ] ; then exit 0 
fi

sudo -S "/sbin/$VARIANT"

По крайней мере диалог спасает от случайного тыка, если напрямую прописать эти команды в меню.

47 (01.05.2013 15:07:01 отредактировано zenon)

Re: Маленькие хитрости в Linux

Опять же есть вариант такой: cb-exit
Висит на Super+X
http://storage1.static.itmages.ru/i/13/0501/s_1367410524_5285745_1f51f251cd.png
И oblogout для Gentoo есть в оверлее flora
Зависит от используемой темы значков:
http://storage6.static.itmages.ru/i/13/0501/s_1367410699_5172559_3fcc1c3e35.png

48 (01.05.2013 21:26:27 отредактировано ormorph)

Re: Маленькие хитрости в Linux

Гы, тут немного поэкспериментировал, добавил в
/etc/sudoers  запись:
USER localhost=NOPASSWD: /usr/sbin/rtcwake

И прикрутил к скрипту данную команду, получился не плохой будильник.
Работает только там где настроен спящий режим с сохранением в оперативную память. Компьютер просыпается в определенное время и проигрывает случайную мелодию из каталога указанного в переменной folder

Скрипт:

#!/bin/sh


tm="$(zenity --entry \
        --title="Время подъема!" \
        --text="Введите время формат 00:00" \
        --entry-text "00:00")"

if [ "$?" -eq "1" ] ; then exit 0
fi

# громкость
volume=10
volume_max=90

folder=~/Documents/MY/MUSIC/chingishan/*
mplayer_start()
{
    # убиваем все процессы mplayer-а
    kill -9 $(pidof mplayer)
    
    # включаем случайную мелодию с бесконечным повтором
    if [ -z "$1" ] ; then
        mplayer -loop 0 -shuffle $folder &> /dev/null &
    fi
}

# Проверка формата времени 16:41
    if [[ "$tm" == [0-9]:[0-9][0-9] ]] || [[ "$tm" == [0-9][0-9]:[0-9][0-9] ]] ; then
        tm=$tm
    else
        zenity --info \
          --text="Неверный формат времени" &&
    exit 0
    fi

date1=$(date -d "`date +%m/%d/%y` $tm" +%s)
date2=$(date -d "`date +%m/%d/%y` $tm tomorrow" +%s)

if [[ $date1 < `date -u +%s` ]] ; then
    date=$(echo $[$date2-`date -u +%s`])
else
    date=$(echo $[$date1-`date -u +%s`])
fi

# засыпаем
sudo rtcwake -m mem -s $date &&

# устанавливаем громкость
amixer -q set Master $volume%



mplayer_start

# повышаем уровень громкости
while true ; do
    amixer sset Master 1%+ &> /dev/null
    volume=$(( $volume+1 ))
    
    if [ $volume -eq $volume_max ] ; then
        break
    fi
    sleep 1 # задержка повышения громкости
done &


zenity --info --text="Отключить будильник"

mplayer_start false
exit 0

Просто вводишь время в формате 20:30 и если это время сегодня еще не наступило, то компьютер включится сегодня в это время. Если это время сегодня уже наступило то компьютер включится в это время на следующий день.

49

Re: Маленькие хитрости в Linux

zenon
oblogout понравился, идет практически с любым менеджером окон, так как назначение команд кнопкам меню легко правится в /etc/oblogout.conf

50

Re: Маленькие хитрости в Linux

Автостарт (~/.config/openbox/autostart) из openbox (по мотивам кранча), может пригодится кому.

eval $(gnome-keyring-daemon -s --components=pkcs11,secrets,ssh,gpg) &
## Set root window colour
hsetroot -solid "#2E3436" &
## Group start:
## 1. nitrogen - restores wallpaper
## 2. compositor - start
## 3. sleep - give compositor time to start
## 4. tint2 panel
(\
nitrogen --restore && \
cb-compositor --start && \
sleep 2s && \
tint2 \
) &
## Start Clipboard manager
clipit &
## Keyboard layout indicator
qxkb &
## Volume control for systray (pnmixer/volumeicon)
# pnmixer &
volumeicon &
## NM applet
nm-applet &
## Tilda
tilda &
## blueman-applet/bluetooth-applet &
blueman-applet &
## Volume keys daemon
xfce4-volumed &
## Enable power management
xfce4-power-manager &
## Start Thunar Daemon
thunar --daemon &
## Start xscreensaver
xscreensaver -no-splash &
## Set keyboard settings - 250 ms delay and 25 cps (characters per second) repeat rate.
## Adjust the values according to your preferances.
xset r rate 250 25 &
## Turn on/off system beep
xset b off &
## Run the conky
conky -q -p 4 &

Что надо:
x11-misc/hsetroot
gnome-base/gnome-keyring
x11-misc/nitrogen
cb-compositor - в /usr/local/sbin закинут.
для работы скрипта нужен x11-misc/compton
x11-misc/clipit
x11-misc/qxkb
media-sound/volumeicon
media-sound/pnmixer
gnome-extra/nm-applet
net-wireless/gnome-bluetooth или net-wireless/blueman
xfce-extra/xfce4-volumed
xfce-extra/xfce4-power-manager
xfce-base/thunar
app-admin/conky
http://storage7.static.itmages.ru/i/13/0502/s_1367438446_3370136_aa76d10886.png

51

Re: Маленькие хитрости в Linux

Родная панель fluxbox не очень то нравится, можно ее заменить на tint2
для этого можно
соответствующие строчки в ~/.fluxbox/init привести к такому виду:

session.screen0.toolbar.visible:    false
session.screen0.toolbar.tools:

И поставить в автозапуск
Прописать в ~/.fluxbox/startup
sleep 2s && tint2 &
перед строчкой exec fluxbox

Для генерации меню можно использовать fluxbox-generate_menu или стороннюю что мне больше нравится marchfluxmenu

Понравился для визуальной правки меню редактор меню FluxMenu Тыц

Написал ебилд для установки FluxMenu в gentoo. тыц

Правда я в ебилде не прописал зависимости, хотя обычно у большинства python и pygtk установлены.

52

Re: Маленькие хитрости в Linux

zenon
Очень понравилась программа gxneur можно поставить ее в место qxkb, кроме того что показывает ткущую раскладку значек в трее, она еще автоматически меняет раскладку если текст набран на другом языке, при необходимости можно включить ручное переключение раскладок.

53

Re: Маленькие хитрости в Linux

ormorph⇓ пишет

понравилась программа gxneur

qxkb это в принципе гуй для setxkbmap и значок в трее, те стандарт. Сколько раз не ставил gxneur - её возможности больше мешали... тут кому как.

54

Re: Маленькие хитрости в Linux

zenon⇓ пишет

Сколько раз не ставил gxneur - её возможности больше мешали...

Ну там в принципе можно все в настройках выставить, когда надо текст писать то включать, а когда исходники править то выключать.
Самое простое выбрать в меню остановить демон xneur. И не какие возможности мешать не будут  ab

55

Re: Маленькие хитрости в Linux

У меня на телефон с андроидом, через blueman не получается отправлять файлы, нашлось решение в виде консольной программки ussp-push, которая позволяет отправлять файлы на телефон с андроидом.

Написал скрипт для spacefm, просто в меню инструменты создать новую команду прописать в качестве команды путь к скрипту.
Далее все довольно просто, выделяешь файлы мышкой, и в меню инструменты жмешь на команду, а далее появляется меню выбора найденных устройств, выбираешь устройство, и файлы отправляются.

Скрипт должен работать со всеми устройствами, где работает сервис Object Push (смотри вывод sdptool browse MAC-адрес)

Для работы использует пакет bluez утилиты hcitool для поиска устройств и MAC адреса и sdptool- для определения канала данного сервиса. Ну и собственно для диалога использует zenity. Про ussp-push, я упомянул выше.

Собственно сам скрипт.

#!/bin/sh

$fm_import
PWD=$(pwd)
i=0
while read file
do
MASS=($file)
MAC[$i]="${MASS[0]}"
NAME[$i]="${MASS[1]}"
i=$[i+1]
done <<<"$(hcitool scan)"

NUM=${#MAC[@]}
COMMAND=$(echo "zenity --list --title="Найдено"\
 --column="Название"")

for (( i = 1; i < $NUM; i++ )); do
    COMMAND="$COMMAND ${NAME[$i]}"
done

VARIANT=$($COMMAND)

if [ "$?" -eq "1" ] ; then exit 0
elif [ "$VARIANT" == "" ] ; then exit 0 
fi

for (( i = 1; i < $NUM; i++ )); do
    if [ "$VARIANT" == "${NAME[$i]}" ] ; then
        MAC_ADD="${MAC[$i]}"
    fi
done

z=0
while read file
do
    if [ -n "$(echo $file|egrep "Service Name: Object Push")" ] ; then
        z=1
    fi

    if [ "$z" -eq "1" ] ; then
        if [ -n "$(echo $file|egrep Channel)" ]; then
            z=0
            CHAN=($file)
        fi
    fi
done <<<"$(sdptool browse $MAC_ADD)"

fileexpr(){
for (( i = 0; i < ${#fm_files[@]}; i++ )); do
    DD="${fm_files[$i]}"
    DD="${DD//$PWD\//}"
    ussp-push "$MAC_ADD@${CHAN[1]}" "$DD" "$DD" ;
    sleep 1s
done
}
fileexpr >/dev/null

56 (04.05.2013 16:36:23 отредактировано ormorph)

Re: Маленькие хитрости в Linux

Программа для графического диалога zenity, может поддерживать вывод кнопки события c иконкой в трей.

Ниже приведен пример скрипта для захвата видео с экрана.

#!/bin/bash

OUTDIR="$HOME/screenshot"
if ! [ -d "$OUTDIR" ] ; then
    mkdir -p "$OUTDIR"
fi

#Определяет текущее разрешение экрана:
while read file
do
    MASS=($file)
    if [ -n "$(echo ${MASS[1]}|egrep '\*\+')" ] ; then
        SCR_SIZE="${MASS[0]}"
    fi
done <<<"$(xrandr --current)" 

#Генерируе случайное имя
NAME="$(tr -cd [:digit:] < /dev/urandom | head -c8)"
FILE="VID_$NAME"

#Выбор со звуком или без - вывод звука на pulseaudio
if [ "$1" == "-sound" ] ; then 
    SOUND="-f alsa -ac 2 -i pulse -acodec mp3 "
else
    SOUND=""
fi
# Команда захвата видео
ffmpeg $SOUND-f x11grab -s $SCR_SIZE -r 10 -i :0.0 -vcodec mpeg4 -sameq $OUTDIR/$FILE.mp4 >/dev/null 2>&1 &

PIDOF=($(pidof ffmpeg))
NUM=$((${#PIDOF[@]}-1))
PID="${PIDOF[$NUM]}"

#иконка в трее
zenity  --notification  --window-icon="/usr/share/icons/hicolor/48x48/apps/gdu-smart-failing.png"  --text "Захват"
kill $PID

Работает просто прописываешь в меню запуск: Для захвата со звуком к  команде скрипта прибавляется ключик -sound, в противном случае захват выполняется без звука.

Для захвата используется ffmpeg, для определения текущего разрешения экрана xrandr

Захват видео отключается щелчком по икноке в трее.

57

Re: Маленькие хитрости в Linux

Генерация паролей.

Генерирует пароль состоящий из цифр и букв 15

$ tr -cd [:alnum:] < /dev/urandom | head -c15

Генерирует пароль состоящий только из цифр длиной 15:

$ tr -cd [:digit:] < /dev/urandom | head -c15

Генерирует пароль состоящий только из букв:

$ tr -cd [:alpha:] < /dev/urandom | head -c15

Генерирует пароль состоящий только из букв в нижнем регистре:

tr -cd [:lower:] < /dev/urandom | head -c15

Остальные параметры смотрим man tr

Можно использовать как для генерации пароля, а также создания файлов со случайным именем.

58 (21.06.2013 14:46:35 отредактировано ormorph)

Re: Маленькие хитрости в Linux

Конвертация различных документов в PDF
Для этого вполне подойдет libreoffice можно и openoffice использовать
просто выполнить команду

libreoffice --invisible --convert-to pdf --outdir "PATH" "file.doc"

Для SpaceFM можно использовать следующий скрипт:

#!/bin/sh

PWD=$(pwd)
$fm_import

for (( i=0; i<${#fm_files[@]}; i++ ))
do
  if [ -f "${fm_files[$i]}" ] ; then
    libreoffice --invisible --convert-to pdf --outdir "$PWD" "${fm_files[$i]}"
  fi
done

ЗЫ: только данная команда нормально работает если не открыт какой нибудь документ в графическом режиме.

59

Re: Маленькие хитрости в Linux

А где в этой команде задаётся какой именно файл конвертировать?

60

Re: Маленькие хитрости в Linux

Любителям поиграть в танчики под Линукс... касается 64разрядных ОС.
Для запуска и корректной установки IE требуется 32 битное окружение Wine настроить очень просто.
Переименуйте или удалите директорию ~/.wine и запустите:

WINEARCH=win32 winecfg