Linux — набор точки и буквы «ю» в rdesktop

Все кому хоть однажды приходилось конектится с Linux по RDP на винду знают о чудесной программке rdesktop (ИМХО конечно). Так вот чудесность этой программы заканчивается когда появляется необходимость использовать на виндомашине розкладку клавиатуры отличную от EN. И тут возможны 2 варианта:

  1. Вам повезло если на виндосерваке эти самые розкладки переключаются сочитанием CTRL+SHIFT. В этом случае язык ввода будет всетаки переключаться и набор кириллических буковок будет происходить. Серьезное неудобство только представляет отсутствие на привычном месте символа точки. Вместо него упорно набирается буква «ю». Притом кнопочка левее (которая обычно и есть «ю») тоже набирает «ю». Чудеса!
  2. Вам не повезло и розкладки переключать надо сочитанием клавиш ALT+SHIFT. Тут все вообще уныло! Как только жмем эту заветную комбинацию клавиш в надежде переключиться в альтернативную розкладку — ввод вообще пропадает как таковой! Дальше глухой номер — жми что угодно хоть до посинения … толку ноль! Мне помогал только перезаход по RDP. Читать полностью

XFCE — Дать пользователю права на выключение/перезагрузку ПК

Ну нравится мне XFCE в качестве графической оболочки для простых смертных пользователей! Вот нравится и все тут. Но вот заметил както после надцатого розвернутого образа, что у пользователей нету прав на выключение и перезагрузку ПК. Оно то может и хорошо что нету, но в моему случае эта фишка очень необходима! Ну можно конечно сначала выходить из XFCE а потом в GDM жать «Выключение» или что там надо — но както нето это … не кошерно. Решил заморочиться и сделать всетаки чтобы работало прям с XFCE. Темболее что самой оболочкой предусмотрены эти кнопки, вот только неактивны. Вот как это выглядит когда прав на выключение нету:

XFCE - Права на выключение

Итак, кнопки есть но неактивные. Поскольку готового рецепта у меня в голове небыло — решил погуглить. И решение на просторах великого и огромного нашлось довольно быстро! Оказывается, всегото надо добавить в sudo конфиг строчку такого содержания:

%users ALL=(ALL) NOPASSWD: /usr/sbin/xfsm-shutdown-helper

Где %users — группа которой я дал права на выключени/перезагрузку без какихлибо паролей и тд.

Чтобы правильно управлять судовым конфигом разработчиками рекомендована утилита visudo — ее я и использовал. Данную строчку просто добавил в конец конфига. Что самое интересное — сразу после сохранения судового конфига, кнопочки стали активные и вполне рабочие. Выглядит теперь это же окошко таким образом:

XFCE - Права на выключение

Вот так вот просто все заработало. Пользуем на ура, чего и вам желаем 🙂

Проблемка с правами после миграции на другой сервер ISP Manager-ом

После миграции на другой сервер ISP Manager-ом в почтовых логах то и дело появлялись строчки примерно такого содержания:

Jul 20 17:23:40 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:26:40 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:29:43 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:32:46 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:35:46 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:38:46 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:41:46 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:44:49 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:47:49 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:50:49 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:54:07 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)

В результате некоторых телодвижений в shell было выяснено что некорректно выставились права на домашние директории пользователям со старого сервера! Точнее неправильным был owner хомяка, группа стояла правильно! Для новосозданных все отлично, а со старыми лажа ….

Поскольку старых пользователей много и руками вбивать команду chown для каждого из них было совсем лениво — написал небольшой скриптик. Вот его содержание:

#!/usr/local/bin/bash
USERS=`ls /home/ISPUser/data/email/some.domain.ua`
for REAL_USER in $USERS
  do
    VIRTUSER=`grep "${REAL_USER}:" /etc/passwd |grep some.domain.ua |cut -d':' -f1`
    VIRTUSER_HOME=`grep "${REAL_USER}:" /etc/passwd |grep some.domain.ua |cut -d':' -f6`
    #   echo $VIRTUSER:ISPUser $VIRTUSER_HOME
    chown -R $VIRTUSER:ISPUser $VIRTUSER_HOME
done

Перед непосредственным использованием сего скриптика рекомендую сначала закоментить строчку с chown и разкоментить ту которая выше с echo — она показывает собственно что будет делать chown. Если ее вывод вас устраивает — возвращайте в изначальное состояние и используйте на здоровье 🙂
У меня скрипт отработал за несколько секунд, и полностью справился со своей задачей! Проблемка решена!

Осталось только пожелать удачных переездов 🙂

Настройка PPTP соединения в Debian GNU Linux

Если не все, то многие знают что такое VPN. А также понимают насколько это хорошо и удобно. Ну вот сие благо пришло и в мой дом 🙂 Попросил на работе чтобы дали мне возможность из дому попадать в рабочую сеть. И вуаля … имею листик с такими вот настройками:

  • Тип соединения — PPTP
  • PPTP сервер — mymegawork.kiev.ua
  • Имя пользователя — worker13
  • Пароль — some_password

Итак, что мы из этого видим? Собственно, видим все что нам нужно — тип соединения, куда подключаемся и как авторизируемся.
Читать полностью

BackUP for MySQL Bases

Чтото сегодня параноя окончательно сьела мой мозг …. и я решился сделать бекап своих мускульных баз. Даже незнаю с чего бы это … вроде все исправно работает, да и спится ночью хорошо 😀 Но вдруг потянуло на подвиг — забекапиться. К слову сказать, бекапов мускула я вообще никогда не делал, и даже не успел об этом пожалеть. Но желание отчегото появилось. Так почему бы не попробовать реализовать?

Утилитка для этого дела искалась недолго — благо все есть в поставке самого MySQL. Называется mysqldump. Пользоваться проще пареной репы. Читать полностью

Зеркало для обновлений программы «АРМ — Звiт Страхувальника»

Все кто хоть каким то боком имеет отношение к бухгалтерам наверняка слыхал о нововведениях в Персонификации. Изменилась и периодичность сдачи отчетов (теперь каждый месяц, а было раз в году), и форма отчета и программка в которой рекомендовано делать этот самый отчет. Все настолько быстро обновляется, что бедняги-розработчики программы по персонификации строчат обновления чуть ли не по 10 штук в квартал! Но с этими постоянными обновлениями морочат себе голову еще и админы, среди которых я 🙁 С зимы началась эта гонка версий, бесконечных обновлений и прочая суета вокруг программы для сдачи злополучного отчета. Если в этот месяц както сдали, то в следующем все сначала … обновления, формирования, заполнения, исправления, запись на флешку и вот она заветная очередь в местном Пенсионном фонде! Стоим …. долго стоим, в итоге говорят что опять чтото нето и все сначала 😀 Ржач еще тот. Особенно для бухгалтеров! И так веселимся теперь каждый месяц! Но чтото я увлекся … хотел то не про это рассказать 🙂

А сказать хотел про то как организовать локальное хранилище обновлений для программы по Персонификации, которая так бурно развивается 🙂 Както, помню, надоело мне отслеживать наличие обновлений и я решил вот что:

  • Зеркалить все что есть на официальном ftp проги себе на машину.
  • Дать возможность любой машине в рабочей сети получать доступ к этой папке.
  • Соорудить какуюто уведомлялку чтобы узнавать о появлении нового обновления.

К слову сказать, эта задача напомнила мне о зеркале для Symantec Offline Updates, которую я вполне успешно решил уже давно, о чем писал отдельную статью ранее. Поэтому тут уже пошел по накатанной дорожке (читай: сделал все по образу и подобию зеркала для симантековских обновлений). Так как зеркалить надо по ftp, выбор клиента очевиден — lftp. Роздавать клиентам в рабочей сети решил по SAMBA, поскольку, все кому оно теоретически может понадобиться — виндомашины бухгалтеров. С уведомлялкой особо не заморачивался — шлем себе на мыло сообщение когда появляется новый апдейт. Замечу также, что в сети есть общая файлопомойка на которой лежат все общие документы, инсталяхи, драйвера и тп. Такчто дополнительно решил зеркалить и туда содержимое папки с программой и обновлениями. Итак скрипт, который я соорудил:

#!/bin/bash
# Script for Sync BestZvit Updates
WORK_DIR="/opt/BZvitPlus"

lftp_sync () {
lftp -c 'open -e "mirror" ftp://ftp.bestzvit.com.ua/BZPLUS/'
wget -c -r -nd -l 1 -A exe http://www.bestzvit.com.ua/updates/zvitplus.shtml
}

sync_to_winshare () {
mountpoint -q /media/samba/winshare || mount.cifs //winshare/Install /media/samba/winshare -o credentials=/root/.pass
[ -d /media/samba/winshare/Buhgalteria/Zvit_Plus_PFU ] && rsync -ru --numeric-ids /opt/BZvitPlus/ /media/samba/winshare/Buhgalteria/Zvit_Plus_PFU
}

notify_mail () {
UPDATE=`find /opt/BZvitPlus/ -mtime -1`
DATE=`date +%F`
[[ -z ${UPDATE} ]] || echo -e ${UPDATE} |mail -s "[${DATE}] - PFU Update Available!" black
}

## <- Lets do it! -> ##
cd ${WORK_DIR}
lftp_sync
sync_to_winshare
notify_mail

Как видно, скрипт совсем несложный для понимания. Локальным хранилищем выбрана директория /opt/BZvitPlus Сначала просто переходим в нее, далее синкаем сюда содержимое ftp://ftp.bestzvit.com.ua/BZPLUS/ После этого проверяем примонтирована ли самбовая общая шара, если нет — монтируем. Для этого используются мои авторизационные данные которые описаны в файлике /root/.pass Содержимое этого файлика у меня такое:

black:~# cat .pass
username=WORK\black
password=my_password
black:~#

Потом rsync-ом синкаем нашу папку /opt/BZvitPlus/ на общую шару /media/samba/winshare/Buhgalteria/Zvit_Plus_PFU. И уведомлялка, если в директории /opt/BZvitPlus/ за последние сутки появилось чтото новое — уведомляем по email локального пользователя black (меня) об этом. Все!

Этот скрипт запускается раз в сутки, для этого добавил такую задачу в crontab:

black:~/scripts# crontab -l
SHELL=/bin/bash
# m h  dom mon dow   command
## <- Sync PFU Updates -> ##
13    4    *    *    *    /root/scripts/bzplus_sync.sh
black:~/scripts#

Ну и ко всему прочему — розшарил на своей машинке эту директорию по SAMBA (на всякий случай). Добавлю также что samba  у меня настроена на доменную авторизацию, о чем я писал ранее, и то что розшарена еще одна папка для решения подобной задачи с симантековскими обновлениями 🙂 Итак, вот конфиг самба сервера:

black:~/scripts# cat /etc/samba/smb.conf
[global]
realm = MY.DOMAIN
workgroup = WORK
netbios name = black
security = ads
idmap uid = 10000-20000
idmap gid = 10000-20000
load printers = no
show add printer wizard = no
printing = none
printcap name = /dev/null
disable spoolss = Yes
show add printer wizard = No
template shell = /bin/bash
template homedir = /home/%D/%U
winbind use default domain = yes

[Symantec Updates]
comment = Symantec Offline Updates
path = /opt/symantec
browseable = yes
writable = no
valid users = @"WORK\domain admins", @"WORK\domain users"

[ARM Zvit]
comment = Setup and Update files
path = /opt/BZvitPlus
browseable = yes
writable = no
valid users = @"WORK\domain admins", @"WORK\domain users"
black:~/scripts#

Ну вот и все! В итоге получили на своей машине зеркало для обновлений и новых инсталях программы «АРМ — Звiт страхувальника». При появлении новых обновлений, шлем email мне! И также роздаем виндовозам всю эту папку по samba. Вот еще и скрин 🙂

Зеркало для АРМ Звiт Страхувальника - Роздаем по samba

Роздаем по samba

Вот как выглядят уведомления по почте:

Обновления "АРМ - Звiт Страхувальника" - Уведомление по почте.

Тут видим  тему письма. А вот что в самом письме:

АРМ Персонификация - Уведомление про обновления по почте

Видно что доступно новое обновление программы 8P_Upd893.exe

Со временем к уведомлению по email планирую добавить уведомлялку на десктоп средствами zenity.

Всем удачи и удачных отчетов по персонификации в придачу!

Адресная книга LDAP с дополнительными полями в Roundcube

Поставил на работе себе Roundcube в качестве Mail клента. Удобно — из любой машинки внутрисети по WEB имею доступ к своей почте 🙂 Установка самого Roundcube совсем тривиальная. Опишу очень коротко. Действуем по схеме:

  • Скачать последнюю версию из офсайта: http://www.roundcube.net/download Рекомендую качать версию stable — она гарантированно рабочая! За остальное никто не ручается 🙂
  • Розпаковать туда куда вам нужно.
  • Настроить apache
  • Установить Roundcube. Действовать согласно описанию из файлика INSTALL который есть в архиве с roundcube.

В результате проделанного выше программка у нас уже стоит — осталось только чуть настроить! Я установил себе roundcube в /opt/rouncube/ далее это будет видно 🙂

Прога у меня заработала после всего выше проделанного без каких бы то ни было проблем. Все отлично. Читаем почту … отправляем. Рулим сообщениями, папками, подписями и тд. Все очень удобно и шустро. Есть адресная книга … но локальная! А захотелось всетаки LDAP-ную книгу 🙂 Вот тут и начались танцы с бубном. Менял много чего в файлике main.inc.php для того чтобы настроить саму связь с сервером LDAP и поля которые одтуда надо брать. Итак, что имеем:

Работающий roundcube версии 3.1 а хотим ничего не сломав получить еще и LDAP Address Book 🙂 желательно  с автодополнением.

Пользователь ldapuser@my.domain с паролем 123. Доменный пользователь, которому достаточно дать права только на чтение LDAP и все! Это может быть просто технический пользователь … специально созданный для таких задач 🙂

LDAP Server — controller.my.domain

Приведу изначальный вид конфига main.inc.php чтобы понять откуда надо двигаться в настройке. Вот часть которая нас интуресует:

// In order to enable public ldap search, configure an array like the Verisign
// example further below. if you would like to test, simply uncomment the example.
$rcmail_config['ldap_public'] = array();

//
// If you are going to use LDAP for individual address books, you will need to
// set 'user_specific' to true and use the variables to generate the appropriate DNs to access it.
//
// The recommended directory structure for LDAP is to store all the address book entries
// under the users main entry, e.g.:
//
//  o=root
//   ou=people
//    uid=user@domain
//  mail=contact@contactdomain
//
// So the base_dn would be uid=%fu,ou=people,o=root
// The bind_dn would be the same as based_dn or some super user login.
/*
* example config for Verisign directory
*
$rcmail_config['ldap_public']['Verisign'] = array(
  'name'          => 'Verisign.com',
  'hosts'         => array('directory.verisign.com'),
  'port'          => 389,
  'use_tls'        => false,
  'user_specific' => false,   // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login.
  // %fu - The full username provided, assumes the username is an email
  //       address, uses the username_domain value if not an email address.
  // %u  - The username prior to the '@'.
  // %d  - The domain name after the '@'.
  'base_dn'       => '',
  'bind_dn'       => '',
  'bind_pass'     => '',
  'writable'      => false,   // Indicates if we can write to the LDAP directory or not.
  // If writable is true then these fields need to be populated:
  // LDAP_Object_Classes, required_fields, LDAP_rdn
  'LDAP_Object_Classes' => array("top", "inetOrgPerson"), // To create a new contact these are the object classes to specify (or any other classes you wish to use).
  'required_fields'     => array("cn", "sn", "mail"),     // The required fields needed to build a new contact as required by the object classes (can include additional fields not required by the object classes).
  'LDAP_rdn'      => 'mail', // The RDN field that is used for new entries, this field needs to be one of the search_fields, the base of base_dn is appended to the RDN to insert into the LDAP directory.
  'ldap_version'  => 3,       // using LDAPv3
  'search_fields' => array('mail', 'cn'),  // fields to search in
  'name_field'    => 'cn',    // this field represents the contact's name
  'email_field'   => 'mail',  // this field represents the contact's e-mail
  'surname_field' => 'sn',    // this field represents the contact's last name
  'firstname_field' => 'gn',  // this field represents the contact's first name
  'sort'          => 'cn',    // The field to sort the listing by.
  'scope'         => 'sub',   // search mode: sub|base|list
  'filter'        => '',      // used for basic listing (if not empty) and will be used with search queries. example: status=act
  'fuzzy_search'  => true);   // server allows wildcard search
*/


// An ordered array of the ids of the addressbooks that should be searched
// when populating address autocomplete fields server-side. ex: array('sql','Verisign');
$rcmail_config['autocomplete_addressbooks'] = array('sql');

Теперь все это дело надо настроить под наши нужды. Привожу свой рабочий кусок конфига, уже даже с допольнительными полями для моб. телефона, рабочего телефона, названия компании и должности. Вот:

$rcmail_config['ldap_public']['WORK'] = array(
  'name'          => 'WORK',
  'hosts'         => array('controller.my.domain'),
  'port'          => 389,
  'use_tls'        => false,
  'user_specific' => false,   // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login.
  // %fu - The full username provided, assumes the username is an email
  //       address, uses the username_domain value if not an email address.
  // %u  - The username prior to the '@'.
  // %d  - The domain name after the '@'.
  'base_dn'       => 'ou="Domain Users", dc=my, dc=domain',
  'bind_dn'       => 'ldapuser@my.domain',
  'bind_pass'     => '123',
  'writable'      => false,   // Indicates if we can write to the LDAP directory or not.
  // If writable is true then these fields need to be populated:
  'ldap_version'  => 3,       // using LDAPv3
  'search_fields' => array('mail', 'cn'),  // fields to search in
  'name_field'    => 'cn',    // this field represents the contact's name
  'email_field'   => 'mail',  // this field represents the contact's e-mail
  'surname_field' => 'sn',    // this field represents the contact's last name
  'firstname_field' => 'gn',  // this field represents the contact's first name
  'phone_field'   => 'telephoneNumber', // telephone
  'mobile_field'  => 'mobile', //added by black_13 (mobile number)
  'company_field' => 'company', //added by black_13 (company)
  'title_field'   => 'title',
  'sort'          => 'cn',    // The field to sort the listing by.
  'scope'         => 'sub',   // search mode: sub|base|list
  'filter'        => '(&(mail=*))', // used for basic listing (if not empty) and will be used with search queries. example: status=act
  'fuzzy_search'  => true);   // server allows wildcard search

// An ordered array of the ids of the addressbooks that should be searched
// when populating address autocomplete fields server-side. ex: array('sql','Verisign');
$rcmail_config['autocomplete_addressbooks'] = array('sql','WORK');

После того как поправили вот таким образом и сохранили, пробуем перезайти в roundcube Теперь если зайти в Контакты (справа вверху) у нас должно появиться еще одна группа с названием WORK. Выбираем ее и видим список контактов взятых с LDAP. Но дополнительные поля пока что отображаться не будут … только cn, mail, sn и gn. Чтобы отобразились допольнительные поля нужно сделать следующее. Правим конфиг /opt/rouncube/program/localization/ru_RU/labels.inc Точнее добавляем туда несколько строк, я добавил в конец, перед ?> вот такое:

$labels['mobile'] = 'Мобильный телефон';
$labels['phone'] = 'Городской телефон';
$labels['company'] = 'Компания';
$labels['title'] = 'Должность';

Дальше, переходим в папку /opt/rouncube/program/steps/addressbook/ и открываем для редактирования файл show.inc В нем находим строчку:

$a_show_cols = array('name', 'firstname', 'surname', 'email');

Меняем на

$a_show_cols = array('company', 'title', 'name', 'firstname', 'surname', 'email', 'phone', 'mobile');

В нужной вам последовательности.

Тоже самое повторяем с конфигами save.inc. Находим строчку:

$a_save_cols = array('name', 'firstname', 'surname', 'email');

И меняем на

$a_save_cols = array('company', 'title', 'name', 'firstname', 'surname', 'email', 'phone', 'mobile');

Повторяем этот же финт с файликом edit.inc Правим строчку:

$a_show_cols = array('name', 'firstname', 'surname', 'email');

до вида:

$a_show_cols = array('company', 'title', 'name', 'firstname', 'surname', 'email', 'phone', 'mobile');

На этом настройка закончена 🙂 Вот скриншот того что получилось:

Чуток пришлось в GIMP помазать скрин — чтобы палива поменьше было, но вобщем результат налицо 🙂 Посути никто нас не заставляет ограничиваться только этими полями. Просто мне они показались важными. Вы можете настроить под себя отображение нужных вам полей и их последовательность.

Главное что мы усвоили как это настраивается 🙂 За сим все … удачи!

Готовый Дипломный Проект по Радиотехнике

Ну наконецто закончил свой дипломный проэкт … и даже успел защитить его на 5 балов! По пятибальной системе 🙂 Он конечно далек от совершенства — но вдруг комуто пригодится чтото из материала 🙂 Угощайтесь. Записку выкладываю на всеобщее обозрение. Чертежи по отдельной договоренности. Связаться со мной можно по email:

Моя электронка

Итак, более детальное описание проэкта:

Язык: Украинский

Тема диплома: Симплексор

Годится для радиотехников-конструкторов-технологов

Обьем записки: 84 страницы (межстрочный интервал 1, 14 шрифт Times New …. )

Графический материал: 6 A1 + 2 A2 Вот перечень:

  • Схема электрическая принципиальная (A1) + перечень элементов
  • Схема структурная (A1)
  • Плакат демонстрирующий работу симплексора в составе ретранслятора (A1)
  • Плата (A1)
  • Печатный узел — сборочный чертеж (A1) + спецификации
  • Деталировка: Основание корпуса (A2) + Крышка корпуса (A2)
  • Симплексор — сборочный чертеж (A1) + спецификации

Вся записка доступна во вложенном архиве для всеобщего обозрения 🙂 В ней есть ряд косяков, но неособо критичных. Можно чуток доработать 🙂

И как защитившыйся могу сказать — удачи вам в этом нелегком деле!

Скачать: Пояснювальна Записка

Разборка ноутбука Dell Inspiron 1420/Vostro 1400

Кто читал предыдущие посты блога наверняка помнит упоминания о моем ноуте — Dell Inspiron 1420. Моделька Vostro 1400 такаяже как мой, разница только в дизайне — такчто статья сгодится и для их владельцев. Ноут хороший, всем меня устраивает, кроме, разве что, отсутствия Bluetooth. Виноват … с синезубом лажа получилась. Сам выпустил из виду когда выбирал себе комплектовку на сайте dell. А вообще уже больше 2-х лет прошло с того времени как прислали мне его из США. За это время где он только не побывал … куда я за собой его только не таскал! И как следствие — последних полгода с охлаждением началась какаято лажа. Кулер гудит, дырчит, рычит … что он только не делает — но не охлаждает. Давненько уже для ноута температура около 60 градусов стала нормальной для режима аля слушаем музыку + браузим инет. Сборка пакетов более чем 15-20 минут подымала температуру на CPU до 80-84 градуса … при любой, даже кратковременной нагрузке — дико греется.  Идея о том что ему (кулеру) каюк приснился плотно засела у меня в мозгу напару с пониманием факта что замена оного обойдется пару сотен гривенок в пользу какогонить сервис-центра 🙂 Но поскольку гудеть он стал совсем невыносимо, было решено ноут разобрать и посмотреть хоть на это дырчащее чудо невооруженным глазом будущего инженера 🙂

Тут хочется сказать отдельное спасибо моему другу Woldemort-у за вдохновение на сие непростое дело, а также оказание посильной моральной и физической помощи в процессе разборно-смазочно-сборочных работ 🙂

Итак, что имеем:

  • Ноутбук Dell Inspiron 1420 с жутко рычащим кулером 🙁
  • 2 отвертки маленького размера — крест + плоская
  • советская смазка — «Шрус 4м» (с виду чтото в духе литола только темнее на цвет)
  • море энтузиазма 🙂 и бодрое настроение

Цель:

Аккуратно, тихо и спокойно, ничего не ломая, разобрать мой ноут Dell Inspiron 1420. Достать одтуда кулер и по результатам внешнего осмотра принять решение о его дальнейшей судьбе:

  • чистка, смазка и установка на место
  • установка нового кулера (поиск оригинального или аналога — что первое подвернется)

Важно!!! Если Вы не уверены в том что делаете, не имеете инструмента и навыков разборки подобной аппаратуры, привыкли работать зубилом и молотком — лучше не делайте то что описано далее. Просто отнесите ноут в сервис-центр — замена кулера или другой мелочевки всегда дешевле восстановления дорожек на плате, шлейфов и прочей малюсенькой дребедени которой напихано в ноут немерено. Повредить чтонибудь в процессе разборки/сборки  — проще простого!

Немного пострашал для приличия 🙂 Ну можно и за работу 🙂

Для тех кто всетаки решился разбирать своими силами, как человек сделавший это, могу сказать — нигде в процессе разборки не применялась грубая сила. Все снимается довольно легко, отстегивается, отврорачивается и тд применяя небольшие усилия. Имейте ввиду, если чувствуете что какойто разьем или шлейф не поддается снятию — еще раз внимательно осмотрите разьемное место — скорее всего вы чтото нетак делаете!

Перед разборкой самого ноута необходимо:

  • Отключить ноутбук от сети 220В
  • вытащить аккумулятор! ОБЯЗАТЕЛЬНО!!!

1. Снимаем Облицовочную Панель над Клавиатурой: Итак, первой снимается пластиковая облицовочная панель с дополнительными кнопками — она находится прямо над клавиатурой. Собственно на ней черными буквами написано наименование и модель ноута.

Разборка Dell Inspiron 1420/Vostro 1400 - Снимаем панель Media Keys

Снимается она нетрудно — держится на пластиковых защелках снизу. Справа есть пазик, я зацепил ногтем за него и аккуратно потянул вверх — одну за одной потихоньку отсчелкивая защелки.

Разборка Dell Inspiron 1420/Vostro 1400 - Освобождаем провода справа

Тут, правда, показано уже со снятой панелью и клавиатурой 🙂 Но для общего понимания — сгодится!

2. Снимаем Клавиатуру: Панель одолели — вперед снимать клавиатуру. Тут еще проще, надо открутить 2 винта (обведены красными кружечками) и снять шлейфик (обведен зеленым). Шлейфик снимается просто. Без усилий. Просто нужно поддеть пластмассовую планочку на верху разьема ногтем вверх. Она какбы приподнимется на несколько мм и шлейф можно будет легко (практически без усилий) вытащить.

Разборка Dell Inspiron 1420/Vostro 1400 - Снимаем клавиатуру

3. Снимаем VGA разьем: После этого нужно подготовиться к снятию дисплея. Для этого нужно снять VGA разьем (слева синенький) и справа освободить проводки идущие в крышку. Делается все это тоже очень просто! Итак VGA — просто приподымаем вверх фиксирующий рычажек который представляет из себя нечто похожее на рамочку из стальной проволочки 🙂 Просто преподымается вверх — никаких усилий. После этого VGA разьем легко отсоединяется потянув вертикально вверх косичку с проводом 🙂 Вот этот разьем:

Разбираем Dell Inspiron 1420/Vostro 1400 - Снимаем разьем VGA

4. Освобождаем Провода идущие в крышку Справа: Теперь нужно освободить провода идущие в крышку справа. Сначала нужно их все отсоединить. У меня там был подключен только Wi-Fi — отсоединятеся очень просто. Снимается легким усилием и все 🙂 Теперь нужно открутить плату за которой уложен этот жгут проводов. Держит ее один винтик (обозначем красным) — откручиваем его и легким усилием влево, вытаскиваем из пазиков в корпусе маленькую платку. После этого провада свободны 🙂 и можно двигаться дальше

Разборка Dell Inspiron 1420/Vostro 1400 - Снимаем плату с Media Keys

5. Снимаем Колпачки: Теперь нужно снять декоративные колпачки которые прикрывают завесы на которых поворачивается крышка. Что это — показано на рисунке ниже. Снимаются легким подковыриванием ногтем. У меня получилось легко и просто 🙂

Разбираем Dell Inspiron 1420/Vostro 1400 - Снимаем Колпачки

6. Снимаем Крышку: После этого крышка готова к снятию. Ее теперь держит только 4 винтика: 2 сзади и 2 снизу. Находятся они рядом на одном уровне — запутаться сложно. Вот показаны те что снизу.

Разборка Dell Inspiron 1420/Vostro 1400 - Снимаем крышку

Когда 4 винта откручены — крышка легко снимается. Ее уже ничего не держит, такчто осторожней — может и вывалиться ненароком 🙂 После этих процедур у вас должен получиться такой же наборчик как и у меня 🙂

Разбираем Dell Inspiron 1420/Vostro 1400 - После снятия Крышки

7. Снимаем HDD и DVD-RW: Дальше тоже несложно. Переворачиваем ноут точпадом вниз и со стороны днища выкручиваем все винты что видим. Снимаем HDD и DVD-RW привод. Если со снятием HDD врятли будут вопросы — то про DVD скажу пару слов. Снимается очень просто — его держит только один винт и сам разьем через который он законтачен на материнку.  В итоге откручиваем 1 винтик (обведен кружечком) и тянем привод в направлении желтой стрелки 🙂 Тоесть какбы вытягиваем его с ноута.
Разбираем Dell Inspiron 1420/Vostro 1400 - Снимаем DVD

8. Снимаем верхнюю Крышку Корпуса: После откручивания всех винтов  и снятия всех крышичек снизу мы получаем возможность снять верхнюю крышку. Ну разве что пару разьемов придется еще снять — непомню уже. Если бы были проблемы — запомнил бы 🙂 Итак после снятия крышки вид у ноута примерно такой (правда у меня тут красуется еще и DVD — я его после снял, но лучше его снимать до снятия крышки):

Разбираем Dell Inspiron 1420/Vostro 1400 - Материнка

9. Снимаем Материнскую Плату: Сложности которые есть дальше. Замечена только одна — снять разьем обведенный желтым. Он сидит весьма прочно и снимается туговато. Надо просто убедиться что все винты которыми крепится материнка откручены и ее ничего кроме этого разьема не держит. Еще рекомендую снять Wi-Fi модуль который закреплен одним винтом (обведен красным) — так проще будет снимать мамку с разьема. Итак с разьема снял потихоньку поддевая материнскую плату вверх вдоль разьема плоской отверткой. Но делать это нужно осторожно и очень легонько — чтобы ничего нигде не повредить.

Разбираем Dell Inspiron 1420/Vostro 1400 - Снимаем материнскую плату

И вот наконец снята мамка 🙂 Вот как все легко и просто!

Разбираем Dell Inspiron 1420/Vostro 1400 - Материнская Плата

10. Снимаем Кулер: Ну наконецто, мы добрались до нашего злополучного хищника — рычащего кулера 🙂 Снять его, учитывая сколько мы тут всего понаснимали, пара пустяков — всегото 3 или 4 винта открутить (уже  и не помню даже сколько). После снятия этот девайс выглядел у меня так:

Разбираем Dell Inspiron 1420/Vostro 1400 - Кулер

Проделанная работа была далеко не напрасна! Пыли в кулер набилось немерено. Притом она спресовалась между вентилятором и радиатором в плотный прямоугольный комок — это просто надо видеть. Жаль не сфоткали … Чего там только небыло … и ворс и шерсть и пылюка и стружка ….  Короче почистили, помыли, смазали и собрали обратно 🙂 Кстати снять саму гребенку не составляет труда — она оказалась вообще незакрепленной — просто тянеш ее вверх и она снимается 🙂 Смазывали смазкой «Шрус 4м» — незнаю правильно или нет … главное что работает 🙂

На случай если комуто нужна маркировка кулера — вот фотка 🙂

Разбираем Dell Inspiron 1420/Vostro 1400 - Маркировка Кулера

А вот так выглядит весь ноут в разобраном состоянии 🙂

Разбираем Dell Inspiron 1420/Vostro 1400 - Разобраный ноутбук

11. Сборка: Ну вот и все 🙂 Почистили, смазали … дальше сборка! Все в обратном порядке. Сложностей никаких. Только нужно проследить чтобы материнская плата хорошо села на тот большой разьем 🙂 А в остальном — трудно ошибиться. Стремиться надо к тому чтобы после сборки не осталось ниодного винтика 🙂

Результаты:

  • Кулер перестал шуметь!
  • Рабочая темпетатура упала до своих номинальных значений — простой 40-41 градус, 100% нагрузка — не выше 60!
  • Освоил разборку — возможно буду скоро красить верхнюю крышку. Уж очень потерлась местами.

Очень доволен результатами. Особенно учитывая что потратили то всего около 2-х часов на все про все! Гдето час заняла разборка, минут 15 чистка и смазка и минут 40 — сборка. На очереди покраска верхней крышки (она изрядно потерлась уже) и возможно перепаковка аккумулятора. Обычный который шел с ноутом уже сдох окончательно — держит около получаса всего. Хорошо хоть есть дополнительный усиленный — тот способен держать около 5 часов 🙂

Засим спешу откланяться — всем удачи и холодных CPU в придачу!

Gentoo — после обновления ядра отвалилась Web Camera

Итак, проблемка … Юзал себе тихо и спокойно ядрышко linux-2.6.30-gentoo-r8 и горя не знал. Но черт дернул обновиться до linux-2.6.32-gentoo-r7. Обновление то прошло успешно … ядро собрал и поставил как полагается, а вот через пару недель вылезла грабля с вебкамерой. Я то ею нечасто пользуюсь. Только иногда Skype в балуюсь … както незаметил даже что она перестала работать 🙂 А в старом ядре работала без проблем … Полез опять конфигурить ядро… Но на удивление, все опции стоят также как и раньше. Уточню что ноут у меня Dell Inspiron 1420 со встроенной камерой OmniVision 2640. Чтобы убедится в правильности нового конфига, сделал вот так:

laptop src # grep -i '\(uvc\|v4l\|ov\)' linux-2.6.30-gentoo-r8/.config
# Sun Nov  1 10:36:58 2009
CONFIG_X86_CMOV=y
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=m
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y
# CONFIG_PCI_IOV is not set
# CONFIG_ATA_OVER_ETH is not set
CONFIG_VIDEO_V4L2_COMMON=m
CONFIG_VIDEO_ALLOW_V4L1=y
CONFIG_VIDEO_V4L1_COMPAT=y
CONFIG_VIDEO_V4L2=m
CONFIG_VIDEO_V4L1=m
CONFIG_V4L_USB_DRIVERS=y
CONFIG_VIDEO_OVCAMCHIP=m
# CONFIG_USB_OV511 is not set
# CONFIG_PROVE_LOCKING is not set
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
# CONFIG_DEBUG_STACKOVERFLOW is not set
laptop src # grep -i '\(uvc\|v4l\|ov\)' linux-2.6.32-gentoo-r7/.config
# GCOV-based kernel profiling
CONFIG_X86_CMOV=y
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=m
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y
# CONFIG_PCI_IOV is not set
# CONFIG_ATA_OVER_ETH is not set
CONFIG_VIDEO_V4L2_COMMON=m
CONFIG_VIDEO_ALLOW_V4L1=y
CONFIG_VIDEO_V4L1_COMPAT=y
CONFIG_VIDEO_V4L2=m
CONFIG_VIDEO_V4L1=m
CONFIG_V4L_USB_DRIVERS=y
CONFIG_VIDEO_OVCAMCHIP=m
# CONFIG_USB_OV511 is not set
# CONFIG_PROVE_LOCKING is not set
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
# CONFIG_DEBUG_STACKOVERFLOW is not set
laptop src #

Тоесть просто сравнил нужные для работы камеры опции старого и нового ядра. Ну какбы все по прежнему. Изменений в конфиге нет, а камера таки не работает. И вполне понятно — ведь устройства /dev/video0 таки нету!

Вобщем, покопавшись немного по разным форумам, рецепта не нашел, зато чтото меня навело на мысль проверить директорию /dev/v4l/ И там, о чудо, нашелся нужный мне девайс video0 🙂

laptop src # ls -l /dev/v4l/
итого 0
drwxr-xr-x 2 root root     60 Май 11  2010 by-id
drwxr-xr-x 2 root root     60 Май 11  2010 by-path
crw-rw---- 1 root video 81, 0 Май 11  2010 video0
laptop src #

Сделал для него симлинк в /dev

laptop ~ # ln -s /dev/v4l/video0 /dev/video0
laptop ~ # ls -l /dev/video0
lrwxrwxrwx 1 root root 15 Май 10 22:45 /dev/video0 -> /dev/v4l/video0
laptop ~ #

И вуаля … камера заработала в Skype!

Но осталась еще одна засада — оказывается также отвалился и микрофон! Короче с камерой победа … с микрофоном еще копаюсь 🙂

Добавлено на следующий день:
Ха! Разобрался и с микрофончиком 🙂 Оказывается всего то надо было правильно выставить настроечки через gnome-volume-control.

Вот как надо было выставить чтобы заработало 🙂 Сначала включаем интегрированный в крышку микрофон (тот что возле камеры)

Потом достаточно выставить уровень записи побольше 🙂 У меня так:

После этого у меня микрофон завелся и работает как надо! Чего и вам желаю ….