25 мая 2012 г.

Делаем скриншоты в LXDE/openbox кнопкой

В openbox/lxde нет родного способа снять скриншот, а мне этого так не хватало. Имеется способ снятия через утилиту import, входящую в состав imagemagick. Сначала вешаем на обычные кнопкосочетания PrtScr (снять весь экран) и Alt+PrtScr (снять текущее окно) вызовы скриптов. Для этого прописываем в ~/.config/openbox/lxde-rc.xml (для openbox в составе lxde) в секцию <keyboard>:

22 мая 2012 г.

linux: почему же ELF interpreter в Arch Linux 64 линкуется в /lib

Как-то однажды я собрал программу в своём 64-битном Arch Linux и отдал бинарник, а оно берёт и не работает. Пишет:
/lib/ld-linux-x86-64.so.2: bad ELF interpreter: Нет такого файла или каталога
Ну, долго тут думать не пришлось — оказался странным путь для ld-linux-x86-64. Я не понял как оно должно быть по LSB, но во всех тестируемых системах ld-linux-x86-64.so.2 ищется в /lib64.
Fedora 17:
$ whereis ld-linux-x86-64.so.2
ld-linux-x86-64.so: /lib64/ld-linux-x86-64.so.2 /usr/lib64/ld-linux-x86-64.so.2
Arch Linux:
$  whereis ld-linux-x86-64.so.2
ld-linux-x86-64.so: /lib/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2
В генту lib это ссылка на lib64.
Причём, в арче в lib64 кроме двух ссылок на соответствующие файлы в lib больше ничего нет:
$ ls /lib64
ld-2.15.so  ld-linux-x86-64.so.2

27 апреля 2012 г.

linux: утилита pv (pipeviewer)

Прикрутил к небольшому скрипту дампа полезную маленькую утилитку pv (pipeviewer), теперь при архивации показыается бегущая шкала и остаток времени, полезно очень.

Как это выглядит:
$ dumparch ./.thunderbird
202MB 0:01:29 [9,67MB/s] [===>        ] 20% ETA 0:05:47

24 апреля 2012 г.

linux: webdav монтирование (на примере yandex.диск)

Сначала монтировал через gvfs, но не вполне удобно. Можно прописать намертво в fstab и всегда монтировать при старте в /mnt куда-нибудь, но мне этот вариант не очень нравится, всё же целевой ресурс персональный и монтироваться-авторизоваться должен на уровне юзера, имхо. Т.е. хочется от юзера монтировать в свою папку и логины-пароли держать где-то там же. Так-то вообще самый простой путь:

15 апреля 2012 г.

Блокировка экрана (LXDE, openbox) с клавиатуры

Самый простой способ: ставим xscreensaver (для арча можно из AUR поставить xscreensaver-arch-logo). Редактируем ~/.config/openbox/lxde-rc.xml (или ~/.config/openbox/rc.xml для чистого openbox), в секцию <keyboard> :
<keybind key="W-l">
      <action name="Execute">
        <command>xscreensaver-command -lock</command>
      </action>
</keybind>
Т.е. я повесил блокировку на Win+L почему-то.

29 марта 2012 г.

java, linux: установка oracle jdk и JAVA_HOME (на примере archlinux)

С тех пор, как SUN/Oracle Java выпилили из дистрибутивов, приходится руками качать и ставить. Вкратце.
Качаем дистрибутив JDK под нашу архитектуру, например, в виде bin-файла. Даём ему права +x, запускаем в /opt (здесь и далее всё от рута), распаковывается в каталог /opt/jdk1.6.0_31.
Для удобства делаем ссылки прямиком на jdk и jre, чтобы потом легко заменять версии:
ln -s jdk1.6.0_31 jdk
ln -s jdk/jre jre
Далее надо настроить переменные окружения. Прописываем в /etc/profile:
export JDK_HOME="/opt/jdk"
export JAVA_HOME="/opt/jdk"
export PATH=$PATH:$JDK_HOME/bin
Если ставим только JRE отдельно, то JDK_HOME не нужна, а JAVA_HOME указывается на корень JRE. В случае JDK лучше JAVA_HOME настраивать на корень JDK, и в PATH добавлять лучше именно bin от JDK.

21 марта 2012 г.

Битовые сдвиги и приведения в Java: подводные камни

1. Операции сдвига

Сначала вкратце самые основы. Как известно, в Java все примитивные типы знаковые, и есть несколько вариантов побитовых операций сдвига:
  • >> сдвиг вправо
  • << сдвиг влево
  • >>> сдвиг вправо («беззнаковый»)
Как видно, в дополнение к классическим сдвигам есть также «беззнаковый» сдвиг, который игнорирует знаковый левый бит и сдвигает его как обычный. Также эти сдвиги называются, соответственно, логический (когда первый бит теряется а последний заполняется нулём) и арифметический (аналогично, но значение считается значением в дополнительном коде и последний бит (знаковый) сохраняет своё значение).