Category: Linux

Multiple Streams Write to the Same File with GNU C Library

Types of Channels

(1) You can have multiple file descriptors and streams (let’s call both streams and descriptors “channels” for short) connected to the same file. [1]

(2) There are two cases to consider: linked channels that share a single file position value, and independent channels that have their own file positions. [1]

(3) It’s impossible for two channels to have separate file pointers for a file that doesn’t support random access. Thus, channels for reading or writing such files are always linked, never independent. [2]

(4) Append-type channels are also always linked. For these channels, follow the rules for linked channels. [2]

Independent Channels

(1) You should clean an output stream after use, before doing anything else that might read or write from the same part of the file. [2]

This statement implies that it is OK for multiple independent channels each write to different parts of the same file at the same time as long as they clean themselves after use.

(2) You should clean an input stream before reading data that may have been modified using an independent channel. Otherwise, you might read obsolete data that had been in the stream’s buffer. [2]




BASH: pipe to functions


function ProcessOneEntry() {

while read entry # Use the “read” function to do the trick
# Code here to do the job


# Application 1:
cat AnListFile | ProcessOneEntry

# Or
# Application 2:

find InputDirectory -name “Pattern” | ProcessOneEntry

Backup and Play DVD with Linux

If your linux does not play DVD correctly, try this:
sudo apt-get install libdvdread4
sudo /usr/share/doc/libdvdread4/

Backup DVD as ISO file:
ddrescue -d /dev/dvd ~/dvd_backup.iso ~/dvd_backup.log
This is just an example. Please replace the arguments with those of your specific backup task.

According to the following post:
Pack­ages needed:
Gnu ddres­cue

The process:
ddres­cue –n –b 2048 /dev/dvd output.iso
dvd­backup –M –i output.iso –o dvd_structure
mkisofs –dvd-video –o clean_dvd.iso dvd_structure

Step 1 copys the DVD to disk block by block but any bad sec­tors found zero data is filled in. At this point you are left with a DVD iso that has the copy pro­tec­tion removed but the encryp­tion is still intact. Step 2 extract the con­tents to a direc­tory. This sec­ond step leaves you with the struc­ture of a dvd with­out the encryp­tion. I want to pre­serve every­thing about the orig­i­nal DVD (except the copy pro­tec­tion and encryp­tion) so I used the mir­ror option. This leaves me with all the fea­tures and orig­i­nal menus. Step 3 take the DVD struc­ture and pack it up into a nice ISO.

Enable/Disable Touch Screen with Ubuntu

1. Identity Touch Screen
xinput –list
It will output a list of your input devices. For example:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=10 [slave pointer (2)]
⎜ ↳ ELAN Touchscreen id=12 [slave pointer (2)]
⎜ ↳ Microsoft Microsoft® 2.4GHz Transceiver v5.0 id=13 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)]
↳ Lenovo EasyCamera id=11 [slave keyboard (3)]
My touch screen is “ELAN Touchscreen”

2. Enable/Disable Touch Screen
xinput –enable “Name Of Your Touch Screen”
xinput –disable “Name Of Your Touch Screen”

For example:
xinput –disable “ELAN Touchscreen”

Set Default File Association in Ubuntu Unity for Applications Not Listed in “Open With”


One can use “mimeopen -d file” to invoke an application to open a file in the command line. Afterwards the used application will be the default application associated with the file type, even from the Nautilus.

Example: Set nano as the default program to open *.txt files:

$ mimeopen -d file.txt

Please choose a default application for files of type text/plain

1) notepad (wine-extension-txt)
2) gedit (gedit)
3) GNU Emacs 23 (emacs23)
4) Other…

use application # 4

use command: nano

Opening “useful.txt” with nano (text/plain)

Install Ubuntu on Ideapad Yoga 2 Pro

Before Buying Yoga 2 Pro:
If you have bought a Yoga 2 Pro, then skip this section and jump directly to the next section. This computer has the following problems, known widely among its users, yet not acknowledged or properly addressed by Lenovo.
1. Inaccurate Rendering of the Yellow Color. This is widely and notoriously known. Lenovo’s BIOS update until today (June 6, 2014) does not solve it. Lenovo regards it as solved and dismisses it, but many users do not agree at all.
2. Poor Micro HDMI Compatiblity. The Micro HDMI port, the only video export of the computer, is hidden too deep to make a stable contact with a standard Micro HDMI cable. Some DIY users have to manually file the bud of their Micro HDMI cable for 1mm~2mm to fit with this port. You may need to try a few cables to find a working one.
3. Unintended Mute Speaker Caused by Inconsistence Audio Jack Detection. Sometimes, the speaker mute because the computer falsely detects audio jack as plugged in, though actually not at all. Unfortunately, plugging-and-unplugging does not always solve the problem. It depends on luck.
4. Frequent WiFi Signal Dropping. To my experience, my 8-year old T60 has much better WiFi performance than my Yoga 2 Pro. By the way, this computer can only receive 2.4G Hz signals, not 5G Hz signals.

Install Ubuntu on Ideapad Yoga 2 Pro

Hardware: IdeaPad Yoga 2 Pro, Intel Haswell i5 CPU, 256 SSD, 8G RAM
Software: Ubuntu 13.10, 64bit

1. Enable booting from USB
Power down the computer. Push the “novo” button, then the computer enter BIOS configuration. Disable “Security Boot”, and Disable “Lenovo Fast Boot”.

2. Prepare Ubuntu Installation USB
Create a Ubuntu Installation USB following the instruction by Ubuntu. After this, find file /boot/grub/grub.cfg and modify it by adding “acpi_backlight=vendor” before “quiet splash”. You shall have something like this in the boot options: “acpi_backlight=vendor quiet splash”. You may need the root permission to edit this file, so use “su” or “sudo” to get the root permission when editing, for example, sudo vi /boot/grub/grub.cfg
This is important. Otherwise, Ubuntu installation runs but the screen does not turn on.

3. Install Ubuntu
Insert the USB disk and power on the computer with the “novo” button. Select USB boot from the Boot Menu. Then the Ubuntu installation process starts. You many need to use “gparted” to shrink the Windows partition and create one partition for Grub boot loader and another partition for Ubuntu. It is wise to avoid overwriting partitions with factory settings and factory boot loaders. For example, the Windows 8 is on partition /dev/sda5. /dev/sda1 ~ /dev/sda4 has software installed by Lenovo, then I shrink /dev/sda5, and created /dev/sda8 for boot loader and /dev/sda9 for Ubuntu. I try to avoid overwriting /dev/sda1 ~ /dev/sda5.

4. Screen Problem
Now, your Ubuntu can boot, but you still have only a black screen.The
Restart computer, and choose “advanced Ubuntu” in grub and choose recovery mode, and choose “root console“. In this way, you can enter the command line mode to solve the screen problem.
Modify /etc/default/grub by modify with GRUB_CMDLINE_LINUX_DEFAULT=”acpi_backlight=vendor quiet splash”
Run update-grub2, then this “acpi_backlight=vendor” option will be pushed to your /boot/grub/grub.cfg. Now the screen problem shall be solved.
Make sure you make this change for all the Ubuntu boot entries of your grub, otherwise some entries will not work.

5. Wifi and Screen Brightness Problem
There may be other solutions, but this simple solution works perfect for me.
In /etc/modprobe.d/ I created a file “blacklist-ideapad_laptop.conf”, and in it, I put “blacklist ideapad_laptop”, in this way, both the wifi and brightness problems are solved. Very simple. You do not need wicd to solve this problem.

6. Tweak for SSD (Optional).
Edit /etc/fstab to add options mount “noatime,nodiratime,discard” to your ubuntu partition.
Edit /etc/fstab to use tmpfs for /tmp and /var/tmp

Useful Links: (Thanks to rubo77)