Гаразд, ось що я зробив, не хочеться вкорінювати 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, все не працює належним чином, якщо арп не показує пристрій.
Потім пристрій буде сидіти в очікуванні, коли 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 .. Це не ідеально, наприклад, команда запускається двічі, тому я Я повинен побачити, чи зможу я трохи краще відфільтрувати відповідні параметри, а також додати тайм-аут на останньому сценарії, просто обкладіть і перевірте, чи зможу я замінити арп чимось кращим, скажімо, шукаючи в / 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-х ',
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
Сподіваюся, я повинен мати гарну приправлену версію, як тільки посаду. (мабуть, завтра).