суббота, 16 января 2021 г.
FlatPak, Snap, AppImage и прочие современные веяния
пятница, 8 января 2021 г.
Mac OS X и древние привычки (клепать файлы .DS_Store)
В отличие от большинства современных операционных систем, OSX Finder хранит настройки отображения папок в создаваемых файлах вида .DS_Store, которые изрядно так бесят, когда взаимодействуешь с другими системами. Чтобы хотя бы заставить систему не писать эти файлы на сетевых хранилищах и USB флешках, необходимо ввести в консоли следующие команды:
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true
После чего необходимо выйти и зайти в профиль. Каждый раз забываю эти команды, так что оставлю это здесь на память.
суббота, 24 октября 2020 г.
Битые картинки и как их выявить
Битые картинки в галерее с фотоаппаратов, камер, телефонов и прочих средств... Наверное это знакомо каждому. И большинство из нас не знает масштаба трагедии, пока не наткнётся на парочку таких замечательных картинок, наподобие той, что я прикрепил в шапке. К слову эту картинку я специально попортил, открыв в текстовом редакторе и добавив один символ в середину файла. Понятно, что исправить такой байт - проблема та ещё, т.к. требует глубокого семантического анализа и не всегда восстановление возможно. Однако, подобных проблем можно избежать путём резервного копирования и использования файловых систем, поддерживающих "лечение" поломанных байтов данных. Но, начнём с простого - как определить, какие файлы поломаны, чтобы восстановить их из резервной копии.
Переключатель звуковых каналов в Linux для ленивых
Будучи любителем послушать музыку с комфортом, соединил свой компьютер с ресивером аудиосистемы с помощью TosLink/ S/PDIF и столкнулся с неприятной особенностью моей новой материнки. Так, она не умеет одновременно работать с аналоговым и цифровым выходом, так что старый трюк с добавлением виртуального устройства со вторым типом выхода не прокатил - второй выход оказался немым. В итоге, чтобы переключиться на S/PDIF, мне нужно каждый раз лезть в настройки PulseAudio и переключать выход на нужный в текущий момент (колонки/наушники у компа или аудиосистема по S/PDIF). Но, лень двигатель прогресса - меня этак картина быстро перестала устраивать и я озаботился переключателем, позволяющим быстро изменять режим звуковой карты. Поделюсь тут этим фокусом, может кому пригодится.
суббота, 20 июля 2019 г.
KXStudio и S/PDIF
пятница, 3 мая 2019 г.
Проблемы с тёмными темами и GTK2/MONO программами
Как любитель тёмных тем, время от времени сталкиваюсь с проблемами в некоторых криво написанных приложениях. Это относится, например, ко всему, что написано на .NET/Mono. К счастью, не много нормальных приложений написано на этой поделке от M$, но встречается. Так, например, произошло с замечательной лёгкой программой для математических вычислений SMath Studio (см. на картинке).
воскресенье, 5 марта 2017 г.
Проблемы с разрешениями для Transmission daemon и не только
Продолжаю настраивать свой домашний NAS и сгребать грабли.
Настроив SAMBA и получив весьма приличный результат по скорости копирования (>90МиБ/с), решил поставить и настроить Transmission daemon - чтоб NAS спокойно качал торренты, а пользователи могли ставить на закачку файлы через Transmission remote GUI, работающий, как с компов, так и с мобилок.
В общем, настройка Transmission daemon - не бог весть какая сложность - редактируешь себе /etc/ transmission daemon/settings.json , добавляешь нужных пользователей в группу transmission (в случае с Debian - это debian transmission), даёшь разрешения на нужные папки этому самому пользователю от которого работает transmission daemon (его можно проверить в конфиге /etc/init.d/transmission-daemon в разделе USER и, казалось бы, дело в шляпе.
Не тут то было. Всё сделал - при попытке скачать torrent получаю ошибку Permission denied.
Лезу, смотрю, что там с папкой:
$ls -l /share/HDB/DownloadВижу ответ: drwxrwxrwx+ и по невнимательности своей думаю - ну всё ок вроде. Даю права владельца пользователю transmission - начало качать.
Вот только нафига нужны все файлы в одной свалке в "Download"? Не нужны - нужно перемешать в папки Video, Music и т.д. А там - такая же засада.
В общем, долго я мучился, пока не обнаружил тот самый идиотский "+" на конце. Оказывается, жолбаный QNAP, в чьём ведении до этого был жёсткий диск, умудрился проставить всем папкам и файлам ACL разрешения. А они ведь такая зараза, что перекрывают обычные nix'овые. Там и пользователи конкретные могут быть вписаны, и маски заданы.
В общем, снёс нахрен все ACL'ы с этих папок командой:
#setfacl -Rb /share/Проблема разрешилась - transmission пишет во все нужные папки - жизнь удалась.
суббота, 4 марта 2017 г.
BTRFS is not so better
Уже старая, вовремя не запощенная запись по BTRFS, родившаяся, как комент на хабрахабре про то, какая хорошая и перспективная файловая система этот бэтэрэфэс.
Оставлю тут в качестве предостережения. Уж поверьте, я с этой системой достаточно намаялся, чтобы предпочитать ей кривоватую связку ext4+LVM, для реализации некоторого функционала, не доступного в старых файловых системах.
Касательно btrfs, может у Facebook'а с его армией программистов низкого уровня и живёт это как-то, но мне кажутся полными камикадзами те, кто пытаются тащить в продакшн файловую систему к которой физически не существует полноценного инструментария для восстановления, с единственным аргументом «да она практически не ломается»… Ломается и ещё как ломается.
И даже не обязательно до потери данных, есть, например такие ошибки, когда найдены чексумы на не существующие данные и инструменты не позволяют изменять файловую систему (отрубаются все возможности по shrink, работе с субтомами и т.д.) и сделать можно ровным счётом ни-че-го. Только бэкап данных --> снос раздела --> восстановление данных на вновь созданный раздел.
И коллектив разработчиков из «гениев», которые лепят ошибки, делают неполноценные фичи, ломающие работающий функционал и потом отмазывающиеся ответами типа «а ну это у нас в версии такой-то баг был, что у вас всё слетело кхерям, но уже исправили» или «ах, а мы и не знали, что новая фича ломает старую». И ладно бы эти косяки попадали только в unstable — в обычном ubuntu со стабильными ядрами такое возникает регулярно — просто потому, что, оказывается, вот таким вот специфическим функционалом файловой системы не многие пользуются и не отловили.
Отсутствие документации на функции и вообще невнятность работы некоторых функций тоже доставляют. До ядра 3.17 при исполнении btrfs check --init-csum-tree с описанием мол «перестраивает дерево чексумм», на деле просто сносило к чёрту дерево чексум и делало файловую систему не читаемой. Потом кто-то в мэйллисте на это тыкнул с вопросом «а нахрена это надо?» И получил ответ типа «а ну не нужно ей пользоваться она ещё не дописана, чтоб реально работала». А добавили так, просто, как кнопку «харакири», только под надписью «реанимация».
В общем, впечатление мрачное не столько от того, что файловая система чудовищно сырая (это-то как раз понятно и простительно), но от отношения разработчиков к процессу разработки и, в частности, к безопасности. По мне, так разработку нужно начинать с методов восстановления целостности файловой системы и данных и не выпускать ни единого стабильного релиза без полной их реализации, а не то, как это делают разработчики btrfs
Ubuntu Server 16.04 LTS Застряла в перезагрузке
Причём вход в Recovery происходил нормально и если врубить пункт продолжения загрузки - всё вроде как грузилось. Изучение journalctl дало единственную наводку - ошибка с radeon drm.
Я так слегка прифигел, от того, что на серверной оси пытается грузиться графика, решил посмотреть, что там в целях загрузки у GRUB стоит и обнаружил:
Исправил это дело на multiuser.target:$sudo systemctl get-defaultgraphical.target
$sudo systemctl set-default multiuser.target
Перезагрузился и... нифига - всё так же.Снова попал в систему через рекавери, и начал гуглить.
Наткнулся на другую проблему на Ask Ubuntu.
Решил проверить настройки GRUB и обнаружил строку:
GRUB_CMDLINE_LINUX_DEFAULT=""
Заполнив пространство между "" параметром "nomodeset" и обновив груб ($sudo update-grub) получил реальную загрузку в текстовом режиме и проблема решилась!В общем, чтоб не забыть решение - оставлю тут.
суббота, 12 сентября 2015 г.
Проблемы поиска
Регулярно задаюсь вопросом "почему разработчики систем поиска по компьютеру - такие пидорасы?". Ведь нет ни одной вменяемой реализации этих систем - на MacOSX вечно задалбывает Spotlight, в Linux их море - и Beegle в GNOME и Nepomuk в KDE и Mediascanner в Ubuntu и другие, винда тоже старается не отставать в попытках проиндексировать все потроха ваших жёстких дисков.
суббота, 14 февраля 2015 г.
Повесть о Linux и графическом интерфейсе (NVIDIA edition).
Одна из не стареющих проблем в Linux - это проблемы с драйверами видео. Как и все проприетарные элементы уровня ядра, драйверы для видеокарт зачастую требуют некой снаровки и большой удачи, т.к. проблемы возникают порой на пустом месте. Обновил систему, перезагрузился - фигак и чёрный экран.
среда, 28 января 2015 г.
Очередные "новшества" Firefox
С обновления 34.1 и далее в 35, разработчики из Mozilla решили заменить строку поиска Firefox. Честно говоря, это строка - это одна из последних фич Firefox, которая меня удерживает в этом многострадальном браузере (все остальные Mozilla позиционно повыпиливала в предыдущих релизах). Ну не удобно мне искать всё через "поиск по умолчанию". Благо в этот раз изменения можно откатить.
воскресенье, 15 июня 2014 г.
MAC OSX + BOOTCAMP и почему это плохо.
Всем, конечно же, известно, что есть такая фича в Mac OS X, как BootCamp, который позволят поставить на Мак Винду. Но вот так уж повелось, что не все понимают, как эта "фича" функционирует, и уж тем более не знают, какие проблемы это может вызвать.
суббота, 8 декабря 2012 г.
Внезапные проблемы при обновлении MacOSX 10.7 до 10.8
Давича, почитав отчеты о том, что ёппл допилила наконец свою последнюю реинкарнацию MacOSX решил-таки обновить iMac.
Казалось бы, где тут могут возникнуть проблемы? А возникли.
После перезагрузки в установщик, макось напрочь отказалась устанавливаться в какой бы то ни было раздел на диске. Выдавалось сообщение а ля "невозможно загрузить с этого диска", а при повторной попытке с выбором конкретно раздела с макосью - "на диске установлена защита".
Что за защита? В чём проблема? Мак ось на то она и макось, чтобы ничего никому не сказать об этом. Просто не могу и всё тут. Аналогичную сообразительность и дружелюбность проявляет и большая часть пользователей маков. Самым действенным советом, найденным в интернетах было - снести всё нахер и переустановить с ноля.
Круто, спасибо, не надо.
В общем, долгими поисками в абсолютно другом направлении (а именно - об установке Windows 8 в GPT раздел без костылей в виде bootcamp/bios emmulation/fuckyourself), я нашёл в кэше гугла (пользователь, который её писал забыл проплатить хостинг и теперь его блог не доступен), я обнаружил, что есть один косяк, который можно поймать при разделе жесткого диска с MacOSX. А именно - то, что после каждого раздела HFS+ должно быть не менее 128Mb не размеченного пространства.
Именно это и оказалось причиной столь грозного отказа макоси устанавливаться. После высвобождения этих злосчастных 128Мб макось без вопросов приняла обновление.
P.S. Если кто сталкивается с подобной проблемой, у нее может быть три причины:
- проблемы с правами доступа - просто запустите disk manager и восстановите привилегии
- диск шифрован и не тем пользователем, который собрался обновлять систему - нужно снять защиту диска в настройках безопасности
- собственно указанное отсутствие необходимых 128 Мб (снести их может например bootcamp при определенных обстоятельствах или любая сторонняя утилита разметки типа Paragon).
среда, 31 октября 2012 г.
Mozilla огорчает
Последнее время складывается ощущение, что Mozilla Foundation сосредоточила свои усилия на уничтожении браузера Firefox.
И даже фигня, что какой-то альтернативно-одарённый решил изменить систему версий с классической вменяемой (первая цифра - движок, вторая - фичи, третяя - багфикс), на наглухо долбанутую (тупо новые циферки каждые пару месяцев), вызвав абсолютную неразбериху в системе плагинов (разработчики не могут отслеживать изменения API - плагины быстро отваливаются и долго ремонтируются). Кстати, именно с этого момента база пользователей Firefox стала драматически сокращаться.
И не так страшно, что они абсолютно просрали мобильный рынок своей косолапостью (и продолжают бушевать в посудной лавке).
Так вот куда более печальным событием стало решение кинуть своих Linux пользователей с поддержкой весьма и весьма популярной интернет-технологии Adobe Flash/Air.
Последнее особенно удручает, т.к. именно из Linux у этого браузера выросли ноги. И расставание с этой платформой может стать основной причиной моего (и не только) с ним расставания. Согласитесь, не очень приятно под разными системами сидеть с разных браузеров.
Суть проблемы в том, что, как уже давно известно, Adobe решила дропнуть Flash плагин для Firefox формата NPAPI, выпуская только PPAPI версию оного.
В принципе, говно вопрос - если NPAPI имел ряд проблем (за что тоже спасибо MF), логично было со стороны Adobe отказаться от его поддержки в пользу PPAPI, используемого в Webkit и как следствие - на большей части браузеров на планете. Но главной печалью этой истории является то, что Mozilla наглухо отказывается реализовывать какую бы то ни было поддержку PPAPI, а следовательно Flash Player 11.2 - последняя версия флеша, которая будет работать в Firefox.
И они могут сколько угодно трендеть про всякие там глобальные замуты, и причины такого решения, но факт останется фактом - знатная часть юзеров не сегодня, так завтра тупо дропнут Firefox в пользу Google Chrome, лишенного этого порока (хотя обладающего рядом других, хоть и не столь существенных).
По совокупности действий, похоже Mozilla Foundation взяла основательный курс на свалку истории и судьба Firefox вероятно стремится к судьбе предшественника - Netscape.
А жаль.
пятница, 19 октября 2012 г.
Ububtu 12.10 и проблемы с cifs
Обновил свою убунту (ну не то чтобы совсем убунту - там Ubuntu+KDE SC), и вдруг мой NAS, который для совместимости с виндовой машиной и MAC OSX имеет шару SMB, отвалился.
Ох, как я "люблю" этих массовиков затейников, которые берутся в дистрибах "чинить" то, что работает...
В общем, поматюгался, посмотрел в инете, что эту болезнь не назовут в мою честь (она у многих), но ответов пока нет и взялся изучать вопрос самостоятельно.
В общем, оказалось, что в новом дистрибе старую утилиту smbfs заменили на cifs-utils, которая нифига не совместима со старой по синтаксису монтирования.
Раньше я монтировал ресурс такой строкой в /etc/fstab :
//192.168.1.5/Public/ /media/MEGAMI_Public cifs _netdev,auto,noperm,nocase,file_mode=0776,dir_mode=0776,user=где _netdev - команда ОС, чтоб не пыталась монтировать ресурс до инициализации сети,USERNAME,password= PASSWORD,iocharset=utf-8 0 1
auto - чтоб само, noperm,nocase,file_mode/dir_mode - параметры системе, чтоб она не пыталась докапываться до сервера с unix'овскими замашками (без noperm ресурс подключится ro, без nocase не будет запрета на папку с одним и тем же именем но разным регистром, а без file_mode/dir_mode dolphin при каждом копировании на сервер будет выть, что у него не получается права поменять).
Из этой строки cifs-utils, как выяснилось, не понимает:
file_mode/dir_mode - но без них уже даёт системе правильные аргументы, так что dolphin не ругается,
iocharset - не знаю почему, но ругается
password - в новой утилите это просто pass
В общем итоге, строку пришлось заменить на:
//192.168.1.5/Public/ /media/MEGAMI_Public cifs _netdev,auto,noperm,nocase,user,user=С такой строчкой всё работает, как работало раньше. Собственно, чего и добивался.USERNAME,pass= PASSWORD 0 1
UPD: Для OpenSuSE 12.3 (может и раньше, х.з.) всё ещё на шаг в сторону:
вместо user и pass надо вводить username и password целиком, иначе жалуется.
среда, 21 декабря 2011 г.
`Анонс идеи (с надеждой на содействие)
четверг, 18 августа 2011 г.
Состояние сервера
Adapter: SMBus I801 adapter at c800
in0: +1.48 V (min = +0.00 V, max = +3.32 V)
Vcore: +1.50 V (min = +0.00 V, max = +2.99 V)
+3.3V: +3.34 V (min = +2.97 V, max = +3.63 V)
+5V: +5.05 V (min = +4.50 V, max = +5.50 V)
+12V: +11.92 V (min = +0.00 V, max = +15.94 V)
fan1: 3321 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
fan3: 1058 RPM (min = 0 RPM)
fan4: 0 RPM (min = 0 RPM)
temp1: +46.8°C (low = -127.0°C, high = +127.0°C)
M/B Temp: +38.5°C (low = -127.0°C, high = +127.0°C)
temp3: +39.8°C (low = -127.0°C, high = +127.0°C)
cpu0_vid: +1.525 V
function memdisp {
MEM=`free -mot | head -n 2 | tail -n 1`
COUNT=1
for ITEM in $MEM
do
if [ $COUNT -eq 2 ] ; then
printf " Total RAM:\t$ITEM Mb\n"
fi
if [ $COUNT -eq 3 ] ; then
printf " Used RAM:\t$ITEM Mb\n"
fi
if [ $COUNT -eq 4 ] ; then
printf " Free RAM:\t$ITEM Mb\n"
fi
COUNT=$[COUNT+1]
done
MEM=`free -mot | tail -n 2 | head -n 1`
COUNT=1
for ITEM in $MEM
do
if [ $COUNT -eq 2 ] ; then
printf " Total SWAP:\t$ITEM Mb\n"
fi
if [ $COUNT -eq 3 ] ; then
printf " Used SWAP:\t$ITEM Mb\n"
fi
if [ $COUNT -eq 4 ] ; then
printf " Free SWAP:\t$ITEM Mb\n"
fi
COUNT=$[COUNT+1]
done
}
UPTIME=`uptime`
D_UP=${UPTIME:2}
alias hi="
printf ' Hello \t`whoami`\n'
printf ' Today is:\t\t`date`\n'
printf ' Number of user login:\t\t`who | wc -l`\n'
printf ' uptime:\t$D_UP\n'
printf ' Sensors:\t`sensors -A`\n'
printf ' HDD1: \t`hddtemp -n /dev/sda`°C\n'
printf ' HDD2: \t`hddtemp -n /dev/sdb`°C\n'
memdisp
"
Today is: Thu Aug 18 13:15:45 MSD 2011
Number of user login: 1
uptime: 3:15pm up 3:19, 1 user, load average: 0.00, 0.01, 0.05
Sensors: adm1027-i2c-3-2e
in0: +1.48 V (min = +0.00 V, max = +3.32 V)
Vcore: +1.47 V (min = +0.00 V, max = +2.99 V)
+3.3V: +3.35 V (min = +2.97 V, max = +3.63 V)
+5V: +5.06 V (min = +4.50 V, max = +5.50 V)
+12V: +11.84 V (min = +0.00 V, max = +15.94 V)
fan1: 3262 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
fan3: 1056 RPM (min = 0 RPM)
fan4: 0 RPM (min = 0 RPM)
temp1: +47.8°C (low = -127.0°C, high = +127.0°C)
M/B Temp: +37.2°C (low = -127.0°C, high = +127.0°C)
temp3: +39.0°C (low = -127.0°C, high = +127.0°C)
cpu0_vid: +1.525 V
HDD1: 36°C
HDD2: 39°C
Total RAM: 495 Mb
Used RAM: 195 Mb
Free RAM: 300 Mb
Total SWAP: 2053 Mb
Used SWAP: 0 Mb
Free SWAP: 2053 Mb
пятница, 5 августа 2011 г.
Всякие там HDD ID
В связи с переездом на новый хард (обзавёлся "зелёным" WD на 2Тб) столкнулся с проблемой, которая раньше обходила меня стороной - с HDD ID.
Если кто не знает, некоторое время назад, стоило изменить разметку диска, как Linux терял свои разделы. Это было связано с тем, что разделы в fstab нумеровались по физическому положению на диске - т.е. sda1 - первый праймари раздел на первом диске, sda5 - первый расширенный раздел и т.д.
То есть стоило впихнуть перед sda5 ещё один раздел, как sda5 переезжал на sda6 и если на нём располагались жизненно важные структуры (типа /usr или /home) система грузиться отказывалась и приходилось грузиться с лайвсиди и править fstab и grub.
Так вот комьюнити решило исправить недостаток. Выявилось сразу несколько решений среди которых наибольшую популярность приобрели UUID и hdd ID.
UUID в первую очередь проталкивала Canonical в своём не безызвестном дистрибе Убунту. hdd ID нашёл прибежище, например, в моей SuSE.
Идея проста и на первый взгляд хороша - назначается каждому разделу уникальный ID, который не теряется при изменении таблицы разделов. Он представляет собой нечитаемое нагромождение буков и цифр, повторения среди которых быть просто не может.
Казалось бы - проблема решена.
Однако не всё так славно. ID привязан к жёсткому диску и при миграции раздела с одного жёсткого диска на другой, ID имеет свойство меняться.
Так и произошло у меня - GRUB выдал ERROR 17, я залез в fstab и обнаружил... уже упомянутые абсолютно не читаемые сочетания буков и цифр.
Возник вопрос, где взять оные для моих целей. Ответ выяснился довольно быстро, но не очевидно, что я в итоге и решил написать тут (как водится, чтоб самому не забыть).
Чтобы выяснить HDD ID нужно просто посмотреть что находится в папке /dev/disk/by-id
Так как этот вариант кодировки указывает на жёсткий диск прямо в названии, вы легко можете понять какой ID какому разделу принадлежит.
Чтобы выяснить UUID можно чисто теоретически заглянуть в /dev/disk/uuid однако это даст вам мало, т.к. бессистемное сочетание буков и цифр никак не скажет вам о своих корнях. Для того, чтобы выяснить UUID в сочетании с физическим расположением диска, можно воспользоваться командой blkid. Если написать её без аргументов (причём не важно из под рута или нет) она выдаст вам красивую таблицу соответствия.
Единственная беда - все эти id'шники надо вбить в fstab и, в моём случае, в меню grub. Не очень удобно хоть и очевидно.
среда, 20 июля 2011 г.
Gallery2 и кириллица
История болезни
Есть такая дурная особенность веб-приложений и CMS написанных зарубежными авторами, а именно - отсутствие какого-либо респекта по отношению к чужим языкам в кодировках. В целом, Gallery2 построена вокруг UTF-8, что должно было в теории лишить её подобных недостатков. Однако, не тут то было.
После установки выяснилось, что в паре мест вместо русского текста наблюдаются кракозябры. Одно из них - список фотографий на боковой панели, второй - в сокращённом виде комментариев.
Попробовал погуглить, но решения своей проблемы не нашёл. Пришлось включать мозг :).
Итак, запустив firebug и разобрав страницу, я увидел функцию entitytruncate, которая замечательно подходила под оба описанных случая - и названия на боковой панели и сокращённые комментирии обрезаны, сиречь truncated.
Пошарив в папке галереи на предмет всяких обрезаний, нашёл следующее:
$find /usr/share/egroupware/gallery/|grep trunc
/usr/share/egroupware/gallery/gallery2/lib/smarty_plugins/modifier.entitytruncate.php
/usr/share/egroupware/gallery/gallery2/lib/smarty/plugins/modifier.truncate.php
Так как страничка под firebug'ом сослалась на entitytruncate, в него и заглянул.
И увидел там замечательные строки:
$string = GalleryUtilities::utf8ToUnicodeEntities($string);
с комментарием:
/*
* Convert multibyte characters to html entities and then get an entity-safe substring.
* Split the string exactly on the boundary. If there's no change, then we're done.
*/
который при переводе на понятный язык звучит, как "отрезаем ноги, чтобы член длинней казался".
И в дальнейшем все выводы преобразуются обрано строчкой типа
return GalleryUtilities::unicodeEntitiesToUtf8($piece);
Естественно, первым, что я попытался выяснить было "а накуа вообще переводить из utf-8 в старый юникод?"
И убрав все следы подобных переводов (первую строчку и в последующих убрав функцию
GalleryUtilities::unicodeEntitiesToUtf8() ).
Сохранив свою новую modifier.entitytruncate.php убедился, что решение работает.
Краказябры исчезли.
В принципе на этом можно было бы и остановиться, однако смутило одно - несмотря на указанное $breakWords=false обрезание происходит где попало, а в некоторых случаях на месте обрезки поперёк слова проявились символы �
Так как PHP я начал изучать относительно не давно, с ходу понять, что там не работает (с учётом того, что текст простенькой функции обрезания вызывает кучу других функций) у меня не получилось.
Однако перед этим чисто из праздного интереса я заглянул в файлик modifier.truncate.php и обнаружил там ту же функцию обрезки текста, только написанную на более человеческом языке и вполне мне понятную.
В общем, не долго думая, я переименовал modifier.truncate.php в modifier.entitytruncate.php, изменил в объявлении
function smarty_modifier_truncate($string, $length = 80, $etc = '...',
$break_words = false, $middle = false)
на
function smarty_modifier_entitytruncate($string, $length, $etc = '...',
$break_words = false, $middle = false)
и всё заработало на этот раз так, как полагается.
Коротко решение
1. Находим в каталоге галереи modifier.entitytruncate.php и modifier.truncate.php и заменяем второй на первый.
В моём случае это:
$cp gallery2/lib/smarty/plugins/modifier.truncate.php gallery2/lib/smarty_plugins/modifier.entitytruncate.php
2. Открываем полученный modifier.entitytruncate.php в любимом текстовом редакторе.
$vim gallery2/lib/smarty_plugins/modifier.entitytruncate.php
3. Меняем строку
function smarty_modifier_truncate($string, $length = 80, $etc = '...',
$break_words = false, $middle = false)
на
function smarty_modifier_entitytruncate($string, $length, $etc = '...',
$break_words = false, $middle = false)
4. Сохраняем файл и перезапускаем сервер:
#service apache2 restart
Дело сделано.












