Опишу как быстро настроить передачу файлов с телефона/на телефон по bluetooth в linux.
Способ будет ориентирован на то, что вы подключаете свой bluetooth-адаптер нечасто и только когда есть необходимость работы с телефоном: все службы и графическая утилита будут запускаться автоматически при подключении адаптера.

Я пошел по пути наименьшего сопротивления и установил пакет kdebluetooth со всеми необходимыми зависимостями (в т.ч. пакет bluez-utils - основное linux-решение для такого рода задач).

Теперь подключаем наш bluetooth usb-адаптер и смотрим вывод dmesg и lsusb для того, чтобы убедится, что ОС его благополучно определила.

Дальше создадим файл /usr/local/bin/ssbt (start-stop bluetooth) со следующем содержанием:


#!/bin/sh
USER=some_user
export DISPLAY=:0.0

ps aux | grep kbtobexclient > /dev/null 2>&1
if [ $? == 0 ]; then
echo "Already running!"
exit 1;
fi

/etc/init.d/bluetooth start
su - $USER -c "kbluetoothd"

su - $USER -c "kbtobexclient"

/etc/init.d/bluetooth stop
killall kbluetoothd


Не забудем сделать его исполняемым и заменить "some_user" на имя своего пользователя.
Этот скрипт будет поднимать всю необходимую систему bluetooth и запускать графическую утилиту для передачи файлов kbtobexclient.
После работы же в kbtobexclient и закрытия программы скрипт будет самостоятельно гасить все ранее запущенные им службы.

Теперь для автоматизации организуем автозапуск этого скрипта при каждом включении usb-адаптера в наш ПК.
Для этого добавим udev-правило (коротко: значения product и vendor взяты из вывода lsusb, для подробных разъяснений см. ссылки раз и два) в один из файлов /etc/udev/rules.d/ (лучше для таких целей создать собственный файл с названием, стоящим по алфавиту выше остальных). Собственно текст правила:

# For bluetooth
BUS=="usb", SYSFS{idVendor}=="0a12", SYSFS{idProduct}=="0001", RUN+="/usr/local/bin/ssbt"

Готово: теперь с помощью kbtobexclient можно будет слать файлы на телефон, а демон kbluetoothd будет автоматически принимать файлы.

Ситуация для примера такая: есть два сервера за шлюзом.
Правила ip-tables настроены так, что 22 порт просто пробрасывается на первый сервер, соединения же на 3500-й порт шлюза пробрасываются на 22-й порт второго сервера.
В результате по одному ip-адресу доступны 2 ssh-сервера на разных портах.
И теперь при попытке подсоединиться ко второму возникает конфликт ключей, т.к. ключ второго сервера не совпадает с сохраненным в файле known_hosts ключем первого сервера.
ssh разрывает соединение, предотвращая (по её мнению) подмену ip-адреса ssh-сервера:


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!


Можно конечно совсем отключить проверку ключей, но это является не самым безопасным решением.
Альтернативное же решение (может опять же не лучшее, но первое пришедшее мне в голову после беглого прочтения манов ssh) - создать для каждого из двух серверов свой файл для хранения ключей.

Для этого создаем конфиг (~/.ssh/config) следующего содержания:


Host remote1

    Hostname 192.168.1.1

    Port 22

    UserKnownHostsFile remote_file1



Host remote2

    Hostname 192.168.1.1

    Port 3500

    UserKnownHostsFile remote_file2



Где remote_fileX - полные пути к альтернативным файлам known_hosts (логично дать им названия, содержащие имя сервера, а также положить их в ~/.ssh/)

Можно также добавить имена пользователей для серверов с помощью добавления (после имен соответствующих серверов) в конфиг строк вида:

User имя_пользователя

Это позволит не вводить имена каждый раз при обращении к серверам.

Всё, теперь оба наших сервера доступны с помощью следующих простых команд:

$ ssh remote1
$ ssh remote2

В одном из своих предыдущих постов я отписывал как вставлять произвольный текст (тот же программный код со спецсимволами) в сообщения на Blogger.
Теперь же случайно наткнулся на куда более удобный и функциональный способ: с помощью всем известного редактора GVim, который позволяет в один клик (пункт меню "Сделать HTML с подсветкой") не только создать html, но и сохранить выбранную ранее в редакторе подсветку синтаксиса.
Думаю будет полезно не только пользователям Vim, тем более, что изучать редактор для использования этой функции вовсе не обязательно.

В подтвержедие моих слов скриншот:

... И пример вставленного текста (следует вставлять код окруженный в сгенерированном html-файле тегом "body"):


#include <stdio.h>

int main()
{
    int i;
    i = 1;
    return 0;
}


 

Copyright © 2007 DamnSmallBlog. Content is licensed under Creative Commons Attribution-Noncommercial.

Design: GeckoandFly and Blogcrowds.