Acer 3400LMI User Manual
Size:
756.04 Kb
Download

F8­x86_64 on the Acer Ferrari 3400LMi

take care of business. Dialing and connecting works fine and the debug output looks ok. However, when the session is disconnected the debug output goes south. It will start to flood the console with the exact same messages as seen above during a connect. In this case we may actually use the modem but need a small tweak.

My temporary fix for the problem in this case is to restart the slmodemd service right after disconnecting a session. I configure my dial­up client, Kppp, to execute/etc/init.d/slmodemd restart upon disconnect. Unarguable this is a really dirty fix, but works quite well.

15.2.3 System hang

The issue reported above together with the fact that slmodemd runs with real­ time priority by default may be devastating. When the modem daemon goes insane it will hug your CPU and squeeze it all real hard.

If the daemon has real­time priority you will have a hard to get control over you system again and a forced shutdown might be the only way out.

Note: You shouldalways runslmodemd with the­­nortpriority option set. Failing to do so might hang your entire system.

16 References

This document is a revised version of FC4­x86_64 on the Acer Ferrari 3400LMi

http://ferrari.databa.se/3400/fc4/

Below are the links I found most useful when I originally sat up my Precious. Thank you guys:

XStrikeForce/HowToRandR12 ­ Debian Wiki Brice Goglin

http://wiki.debian.org/XStrikeForce/HowToRandR12

Linux IEEE 1394 drivers http://www.linux1394.org

Fedora Core 1 on the Acer Ferrari 3000LMi Evan

http://ferrari.kicks­ass.org/

SuSE 9.1 Pro on the Acer Ferrari 3000LMi Dirk Praet http://www.designisdead.com/ferrari/

Wireless LAN resources for Linux Jean Tourrilhes

42

F8­x86_64 on the Acer Ferrari 3400LMi

http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wireless.html

43

F8­x86_64 on the Acer Ferrari 3400LMi

Appendix A /etc/X11/xorg.conf

#Xorg 7.2 configuration for Acer Ferrari 3400 LMi

#Available at http://ferrari.databa.se/3400/f8/xorg.conf

Section "ServerLayout"

 

 

Identifier

 

"Default Layout"

 

 

Screen

0

"Screen0"

0 0

 

InputDevice

"Keyboard0"

"CoreKeyboard"

 

InputDevice

"Synaptics"

"CorePointer"

EndSection

 

 

 

Section "InputDevice"

 

 

Identifier

 

"Keyboard0"

 

 

Driver

 

"kbd"

 

 

Option

 

"XkbModel"

"pc105"

 

Option

 

"XkbLayout"

"se"

EndSection

 

 

 

Section "InputDevice"

 

 

Identifier

 

"Synaptics"

 

 

Driver

 

"synaptics"

 

 

Option

 

"Device"

"/dev/input/mice"

 

Option

 

"Protocol"

"auto­dev"

 

Option

 

"Emulate3Buttons"

"yes"

EndSection

 

 

 

Section "Monitor"

 

 

 

 

Identifier

 

"Internal Panel"

 

 

VendorName

 

"Acer"

 

 

ModelName

 

"Ferrari 3400 LMi"

 

#

Option

 

"PreferredMode"

"1400x1050"

EndSection

 

 

 

Section "Monitor"

 

 

 

 

Identifier

 

"External VGA Monitor"

#

Option

 

"LeftOf"

"Internal Panel"

EndSection

 

 

 

Section "Monitor"

 

 

 

 

Identifier

 

"External TV"

 

#

Option

 

"RightOf"

"Internal Panel"

EndSection

 

 

 

Section "Device"

 

 

 

 

Identifier

 

"Videocard0"

 

 

Driver

 

"radeon"

 

44

F8­x86_64 on the Acer Ferrari 3400LMi

 

 

Option

"Monitor­LVDS"

"Internal Panel"

 

Option

"Monitor­VGA­0"

"External VGA Monitor"

 

Option

"Monitor­S­video"

"External TV"

#

Option

"AccelMethod"

"XAA"

#

Option

"AGPMode"

"1"

#

Option

"ColorTiling"

"1"

 

Option

"EnablePageFlip"

"1"

EndSection

 

 

 

Section

"Screen"

 

 

 

 

Identifier

"Screen0"

 

 

Device

"Videocard0"

 

 

DefaultDepth

24

 

 

SubSection "Display"

 

 

Viewport

0 0

 

 

Depth

24

 

 

Virtual

3000 2000

 

 

EndSubSection

 

 

EndSection

 

 

 

45

F8­x86_64 on the Acer Ferrari 3400LMi

Appendix B – dual­head.sh

#!/bin/bash

#

#Available at http://ferrari.databa.se/3400/f8/dual­head.sh

#A script to manipulate connected graphical outputs,

#including TV­out. It includes the most common operations

#and may also be configured to run on an XF86Display event.

#Typically Fn­F5 or similar on a laptop.

#

#Prerequisites:

#This script will work with one graphics card only.

#Furthermore it will only work with two CRTCs,

#i.e. two outputs may be simultaneous active.

#

#Comments:

#In order to optimize performance and minimize flicker

#xrandr is at most called twice. Once to read the current

#state and once for setting the new state. Thus, some code

#may look strange at the first glance.

#

# By Sven­Göran Bergh, 2008­01­01

#

### Edit user settings here: ######################################

#

DEFAULTACTION="toggle" # May be changed with argument 1 DEFAULTSIDE="left" # May be changed with argument 2

#

###################################################################

### Edit hardware specific settings here: #########################

 

#

 

 

 

INTERNAL="LVDS"

# Specify the name

of

the

internal display

TVOUTPUT="S­video"

# Specify the name

of

the

TV­output

TVMODE="pal"

# Specify TV mode,

PAL or

NTSC

 

#

 

 

 

###################################################################

# Get X user

#XUSER=$(w | awk '$3 ~ /^:[0­9]$/ {print $1; nextfile}')

#Get X display (current or first running) DISPLAY=${DISPLAY:= \

$( w | awk '$3 ~ /^:[0­9]$/ {print $3; nextfile}' )}

#Quit if no X­server is running

[ "${DISPLAY}" ] || exit 1

46

F8­x86_64 on the Acer Ferrari 3400LMi

function usage() {

printf "Usage: %s [init|toggle|status|internal|tv [side]]\n" \ "`basename $0`"

}

ME=`basename $0 .sh`

# What to do? ACTION="${1:­$DEFAULTACTION}"

#Which side of $INTERNAL should the external output be shown? SIDE="${2:­$DEFAULTSIDE}"

#If invalid action or help, quit before calling xrandr

case `echo "$ACTION" | tr A­Z a­z` in

init | toggle | status | internal | tv )

# Recognized actions. Do nothing and continue...

;;

help | usage ) usage

exit 0

;;

* )

printf "%s: Unknown operation, %s\n" "$ME" "$ACTION" usage

exit 1

;;

esac

# Get information about all outputs ALLINFO=( $( \

xrandr ­q \

| awk ­­ '/connected/ { printf " %s", $1;

if ($2 !~ /dis/) { if ($3 ~ /[0­9]+x/)

printf "@%s", $3; else

printf "@";

}

}' \

))

#Initialize some useful variables

for (( i=0; i<${#ALLINFO[*]}; i++ )) {

#Array with all outputs ALLOUT[$i]=$( \

echo "${ALLINFO[$i]}" \

| awk ­F@ ­­ '{print $1}' \

)

#Array with all connected outputs CONCTD[$i]=$( \

47

F8­x86_64 on the Acer Ferrari 3400LMi

echo "${ALLINFO[$i]}" \

| awk ­F@ ­­ '/@/ {print $1}' \

)

#Array with all active outputs ACTIVE[$i]=$( \

echo "${ALLINFO[$i]}" \

| awk ­F@ ­­ '/@[0­9]+x/ {print $1}' \

)

#Array with all resolutions

ALLRES[$i]=$( \

echo "${ALLINFO[$i]}" \

| awk ­F@ ­­ '{print $2}' \ | awk ­F+ ­­ '{print $1}' \

)

#Array with all positions ALLPOS[$i]=$( \

echo "${ALLINFO[$i]}" \

| awk ­F@ ­­ '{print $2}' \

| awk ­F+ ­­ '/+/ {print $2 "+" $3}' \

)

#Index for the internal output

[ "${ALLOUT[$i]}" == "$INTERNAL" ] && INTNDX=$i

# Index for the currently active external output

["${ACTIVE[$i]}" ­a "${ACTIVE[$i]}" != "$INTERNAL" ] \

&&CURNDX=$i

}

CURNDX=${CURNDX:­$INTNDX}

CURRENT=${ALLOUT[$CURNDX]}

case `echo "${SIDE}" | tr A­Z a­z` in left)

LOCATION="­­left­of $INTERNAL"

;;

right)

LOCATION="­­right­of $INTERNAL"

;;

top|above)

LOCATION="­­above $INTERNAL"

;;

bottom|below)

LOCATION="­­below $INTERNAL"

;;

esac

function run() { EXEC="$*"

logger ­t $ME "Executing: $EXEC" $EXEC | logger ­t $ME

}

function init() {

48

F8­x86_64 on the Acer Ferrari 3400LMi

# Set load detection on all external outputs for out in ${ALLOUT[*]}; do

[ "$out" != "$INTERNAL" ] && \

INIT="$INIT ­­output $out ­­set load_detection 1" [ "$out" == "$TVOUTPUT" ] && \

INIT="$INIT ­­set tv_standard $TVMODE"

done

run xrandr $INIT

}

function status() {

printf "%­10s%­11s%­8s%­10s%­10s\n" \

"Output" "Connected" "Active" "Position" "Resolution" for (( i=0; i<${#ALLOUT[*]}; i++ )) {

[ "${CONCTD[$i]}" ] && c="yes" || c="no" [ "${ACTIVE[$i]}" ] && a="yes" || a="no" printf "%­13s%­9s%­7s%­10s%­10s\n" \

"${ALLOUT[$i]}" "$c" "$a" \ "${ALLPOS[$i]}" "${ALLRES[$i]}"

}

}

function internal() {

#Internal output always active INT="­­output $INTERNAL ­­auto ­­pos 0x0"

#Turn off currently active external output [ "$CURRENT" != "$INTERNAL" ] && \

OFF="­­output $CURRENT ­­off"

run xrandr $INT $OFF

}

function tvout() {

# If TV­output already active, exit

[ "$CURRENT" == "$TVOUTPUT" ] && exit 0

#Internal output always active INT="­­output $INTERNAL ­­auto"

#Turn off currently active external output [ "$CURRENT" != "$INTERNAL" ] && \

OFF="­­output $CURRENT ­­off"

TV="­­output $TVOUTPUT ­­auto $LOCATION"

run xrandr $INT $TV $OFF

}

function toggle() {

# Go to the next connection mode in the toggle sequence:

# LVDS (single) =>

49

F8­x86_64 on the Acer Ferrari 3400LMi

#

LVDS+S­video (mirror)

=>

#LVDS+S­video (side­by­side) =>

#

LVDS+VGA­0

(mirror)

=>

#

LVDS+VGA­0

(side­by­side)

=>

#

LVDS

(single)

=>

#...

#Connection modes that include not connected outputs are skipped.

#Ex: with only VGA­0 connected it is only three connection modes:

if [ "$CURRENT" != "$INTERNAL" ­a \

"${ALLPOS[$INTNDX]}" == "${ALLPOS[$CURNDX]}" ]; then NEXT=$CURRENT

else

for (( i=0; i<${#ALLOUT[*]}; i++ )) {

[ "${CONCTD[$i]}" == "${CURRENT}" ] && break

}

until [ "$NEXT" ]; do

i=$(( ($i+1)%${#ALLOUT[*]} )) NEXT=${CONCTD[$i]}

done

fi

#Internal output always active INT="­­output $INTERNAL ­­auto"

#Turn off currently active external output

[ "$CURRENT" != "$INTERNAL" ­a "$CURRENT" != "$NEXT" ] && \ OFF="­­output $CURRENT ­­off"

#Turn on next connected external output [ "$NEXT" != "$INTERNAL" ] && \

ON="­­output $NEXT ­­auto"

#If mirror mode, reposition internal output.

#Otherwise position external output

["$NEXT" != "$CURRENT" ] \

&&INT="$INT ­­pos 0x0" \ || ON="$ON $LOCATION"

run xrandr $INT $OFF $ON

}

case `echo "$ACTION" | tr A­Z a­z` in init)

init

;;

toggle) toggle

;;

status) status

;;

50

F8­x86_64 on the Acer Ferrari 3400LMi

internal) internal

;;

tv)

tvout

;;

*)

usage

;;

esac

51

F8­x86_64 on the Acer Ferrari 3400LMi

Appendix C – dun­bind.sh

#!/bin/sh

#

#Available at http://ferrari.databa.se/3400/f8/dun­bind.sh

#A verbose sample script for finding the Dial Up Networking

#channel on a Bluetooth device and binding a /dev/rfcomm port to it.

#By Sven­Göran Bergh, 2005­11­03

#Update 2007­04­03 Added release of passive/closed rfcomm port.

#

#Use this /dev/rfcomm port RFPORT=1

#Name of Bluetooth device to bind to: BTNAME="S­Gs P900"

success() {

echo ­e $"\\033[60G[ \\033[1;32mOK\\033[0;39m ]" return 0

}

failure() {

echo ­e $"\\033[60G[\\033[1;31mFAILED\\033[0;39m]" exit 1

}

#Check that local Bluetooth device is active echo ­n $"Checking for local Bluetooth device..." hciconfig | grep 'UP RUNNING' &> /dev/null \

&&success || failure

#If the rfcomm port exists but is currently not in use, try to release

it

if [ "`rfcomm show ${RFPORT} 2> /dev/null | awk ­­ '{print $5}'`" == "closed" ];

then

echo ­n $"Trying to free closed port /dev/rfcomm${RFPORT}..."

rfcomm release ${RFPORT} &> /dev/null \ && success || failure

fi

# Check if the rfcomm port is free

echo ­n $"Checking that /dev/rfcomm${RFPORT} is free..." rfcomm show ${RFPORT} &> /dev/null \

&&failure || success

#Check for the remote Bluetooth device

52

F8­x86_64 on the Acer Ferrari 3400LMi

echo ­n $"Searching for remote Bluetooth device ${BTNAME}..." BTADDR=`hcitool scan | grep "${BTNAME}" | awk ­­ '{print $1}'` [ "${BTADDR}" ] && success || failure

# Find the Dial Up Networking channel

echo ­n $"Searching for Dial Up Networking service..." DUN=`sdptool search ­­bdaddr ${BTADDR} DUN \

| awk ­­ '/Channel/ {print $2}'` [ "${DUN}" ] && success || failure

# Bind the rfcomm port to the DUN channel

echo ­n $"Binding /dev/rfcomm${RFPORT} to DUN channel ${DUN}..." rfcomm bind ${RFPORT} ${BTADDR} ${DUN} \

&& success || failure

53