Хорошо, вот что я сделал, рутирование HTC не требуется:
Настройка bind9, NAT и т.д ...
примечание: 1: если вы просто выполните sudo echo 1> / proc / sys / net / ipv4 / ip_forward, вы получите ошибку с правами доступа, поэтому вот сценарий для процесса 2: вы можете сделать iptables более конкретным, как он это делает, добавление параметров для конкретных устройств.
cd ~
echo '!/bin/bash
apt-get install bind9
iptables -A POSTROUTING -t nat -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward' > setup_bind9_nat.sh
chmod +x setup_bind9_nat.sh
sudo ./setup_bind9_nat.sh
Теперь подключите ваш телефон и выберите «Интернет через»
дождитесь появления устройства в:
ifconfig
проверьте это также в:
arp
Я обнаружил, что мне пришлось отключить устройство, а затем снова подключить его, чтобы оно появилось в arp, все не работает должным образом, если arp не показывает устройство.
Затем устройство будет ждать, пока HTC Sync отправит ему сообщение, поэтому вам нужно смоделировать сообщение HTC Syncs:
#change this line to be more specific if you have more than one usb network device
phone_usb_device="usb"
get_ip ()
{
arp -n | grep $phone_usb_device | awk '{print $1}'
}
#TODO: This needs a timeout and loop needs cleaning up, but works fine and borrowed from another post.
echo "waiting for IP on computer usb"
while [[ `get_ip` < 192 ]];do sleep 2; done
phoneip=`get_ip`
echo "IP adress is $phoneip "
echo -n -e "\x00\x02\x00\x00" | nc -q 2 $phoneip 6000 > /dev/null
Я могу написать версию этого, используя D-Bus, чтобы последняя часть выполнялась автоматически, когда устройство подключено и т. Д ....
Хорошо, вот моя работа в процессе, я не смог найти ничего «общего» на d-bus, поэтому я выбрал немного хакерское решение, используя udev .. Это не идеально, например, команда запускается дважды, поэтому я Посмотрим, смогу ли я немного лучше отфильтровать соответствующие параметры, также добавлю тайм-аут в последнем скрипте, просто добавлю и посмотрим, смогу ли я заменить arp чем-то лучше, скажем, посмотрев в / proc
здесь. мой файл .rules из /etc/udev/rules.d, который я создал
cat /etc/udev/rules.d/htc-desire.rules
Вы можете называть это как угодно, но НЕ НАЧИНАЙТЕ ЕГО НОМЕРОМ, чтобы он запускался последним из всех.
Добавьте следующее в файл как sudo, используя редактор по вашему выбору и т.д ....
#KERNEL=="usb?" or DRIVERS=="usb" not sure which is best, may need extra mode information too from usb device.
SUBSYSTEM=="net", DRIVERS=="usb", ATTRS{manufacturer}=="HTC", ATTRS{idProduct}=="0ffe", RUN+="/home/olli/chain_mock_htc_sync.sh $kernel"
Ubuntu is setup to create the file with the correct permissions already
ls -lrt /etc/udev/rules.d/htc-desire.rules
-rw-r--r-- 1 root root 248 Jun 26 22:09 htc-desire.rules
По сути, если вы не видите эти 3 'R,
sudo chmod a+r /etc/udev/rules.d/htc-desire.rules
Затем вам понадобятся еще два файла, один для цепочки другого, так как RUN от udev заблокирует все остальное (даже если он запускается последним !!) ... хм ... в любом случае:
Я создал файлы в своем домашнем каталоге на данный момент "/ home / olli /" ... поэтому не забудьте заменить бит / home / olli / на любой, где вы создаете файлы:
так что для меня, перейдите в мой домашний каталог.
cd ~
создать файл с именем
chain_mock_htc_sync.sh
содержащий следующее:
#!/bin/bash
/home/olli/mock_htc_sync.sh "$1" &
exit
сделать его исполняемым
chmod +x chain_mock_htc_sync.sh
создать другой файл с именем
mock_htc_sync.sh
связавшись со следующим
#!/bin/bash
#change this line to be more specific if you have more than one usb network device
phone_usb_device="$1"
get_ip ()
{
arp -n | grep $phone_usb_device | awk '{print $1}'
}
#TODO: This needs a timeout and loop needs cleaning up, but works fine and borrowed from another post.
echo "waiting for IP on computer $phone_usb_device"
while [[ `get_ip` /dev/null
Сделайте его исполняемым:
chmod +x mock_htc_sync.sh
Надеюсь, у меня скоро будет хорошая приведенная в порядок версия. (наверное завтра).