tag:blogger.com,1999:blog-22498451038038134302023-11-15T06:48:39.380-08:00Еще один красноглазый бложекUnknownnoreply@blogger.comBlogger1125tag:blogger.com,1999:blog-2249845103803813430.post-45365761068824762612014-08-18T01:34:00.002-07:002014-08-18T01:56:23.002-07:00Починка Skype 4.3 в linux <div dir="ltr" style="text-align: left;" trbidi="on">
<div>
Последнее обновление клиента Skype для Linux получилось особо удачным. После обновления скайп поработал с недельку, а потом внезапно устал. Перезапуск клиента не помогал, а гугление результатов не давало. Такая же проблема наблюдалась не только у меня, но и у многих других пользователей linux.<br />
<a name='more'></a><br />
Решение проблемы нашлось позже. Видимо разработчики <strike>Skype</strike> Microsoft переусердствовали при запрете протоколов старых клиентов, и скайп начал падать при приеме файлов от пользователей со старой версией skype. А поскольку <strike>Skype</strike> Microsoft худо-бедно наладили синхронизацию истории сообщений, даже полное удаление профиля <span style="font-family: "Courier New",Courier,monospace;"><i>~/.Skype/<yourname></i></span> не помогает, поскольку с созданием нового профиля подтягиваются старые сообщения, в том числе о передаче файлов.<br />
Предупреждаю! Для починки нужно обладать недюжинным терпением.<br />
Итак решение:<br />
<br />
<ol>
<li>Бэкапим базу данных вашего профиля, которая лежит в <span style="font-family: "Courier New",Courier,monospace;"><i>~/.Skype/<yourskypelogin>/main.db</i></span></li>
<li>Запускаем скайп и ждем когда он упадет</li>
<li>открываем базу данных вашего профиля:<span style="font-family: "Courier New",Courier,monospace;"><br />sqlite3 .Skype/<yourskypelogin>/main.db</span></li>
<li>Выполняем скрипт<br /><span style="font-family: "Courier New",Courier,monospace;">>UPDATE messages<br /> SET body_xml =(<br /> SELECT SUBSTR( body_xml, files_start, alt_end - files_start ) ||<br /> SUBSTR( body_xml, 0, files_start ) ||<br /> SUBSTR( body_xml, alt_end )<br /> FROM (<br /> SELECT msg.body_xml,<br /> instr( msg.body_xml, '<files' ) files_start,<br /> instr( msg.body_xml, 'alt="' ) + 5 alt_end<br /> FROM messages msg<br /> WHERE msg.id = messages.id<br /> )<br /> )<br /> WHERE type = 68<br /> AND body_xml NOT LIKE '<file%';</span><span style="font-family: "Courier New",Courier,monospace;"><br />> .quit</span></li>
<li>Возвращаемся к шагу 2</li>
</ol>
</div>
После нескольких попыток вся история синхронизируется, "вредные сообщения" удаляются и скайп работает нормально. Но есть одно "но": история скайпа синхронизируется достаточно нетривиальным образом, в формате peer-to-peer, то есть синхронизация истории происходит только с для контактов которые в сети. Если у вас в контакт-листе есть человек который когда-то слал вам файлы, и он выходит в сеть - ждите беды.<br />
<br />
<br />
<br />
Для решения этой проблемы был написан небольшой shell-скрипт, который выполняет очистку истории и перезапускпри падении в автоматическом режиме. <br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">#!/bin/bash<br />for (( ; ; ))<br /> do<br /> skype<br /> if ["$?" eq 134] #134 - с таким кодом возврата падает скайп<br /> then sqlite3 .Skype/<yourskypename>/main.db < skype.sql #sql-скрипт выше<br /> fi<br />done</span><br />
<br />
не забываем добавить бит выполнения.<br />
терминал у меня открыт всегда поэтому команда <span style="font-family: "Courier New",Courier,monospace;">./skype.sh &</span> отлично справляется (можно и в .xinitrc добавить).<br />
<br /></div>
Unknownnoreply@blogger.com0